HexaGolf: Ротагони


15

Дивіться також: Вордагони

Виклик

Враховуючи шестикутник і число nяк вхід, виведіть той самий шестикутник, який обертається n.

Шестикутник

Шестикутник буде такий рядок:

  a b c
 d d e e
f f o g g
 h h i i
  j k l

Шестикутник завжди буде регулярним і міститиме лише символи для друку ASCII:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Обертання

Щоб знайти, на скільки обертати шестикутник, помножте nна 60 градусів, щоб отримати кут повороту. Наприклад, використовуючи вищевказаний шестикутник, якщо nце 2, ми помножимо його на 60, щоб отримати 120 градусів. Потім повертаємо шестикутник на 120 градусів:

  j h f
 k h f d
l i o d a
 i g e b
  g e c

Зверніть увагу, що кожна сторона перемістилася двома сторонами за годинниковою стрілкою.

Якщо nє позитивним, слід обертати шестикутник за годинниковою стрілкою. Якщо nвід’ємник, слід повернути шестикутник проти годинникової стрілки.

n завжди буде цілим числом в діапазоні від 6 до 6 включно.

Приклади

Вхід:

  . u .
 .  |  .
l - + - r
 .  |  .
  . d .

n = 3

  . d .
 .  |  .
r - + - l
 .  |  .
  . u .

Вхід:

  - - -
 /     \
<       >
 \     /
  - - -

n = -1

Вихід:

  - \ >
 -     /
-       -
 /     -
  < \ -

Вхід:

   h e x a
  g o n s a
 n d t r i a
n g l e s m a
 k e m e s a
  d l y m a
   d d e r

n = 6

Вихід:

   h e x a
  g o n s a
 n d t r i a
n g l e s m a
 k e m e s a
  d l y m a
   d d e r

Перемога

Виграє найкоротша програма в байтах.


2
Що ти маєш проти трикутників? : P
Conor O'Brien

4
@ ConorO'Brien Ти не бачив, наскільки небезпечні їхні точки? ;)
бета-розпад

Чи можемо ми взяти вклад як список рядків? Чи можемо ми вважати, що вхід є пробілом?
Лінн

1
Дуже тісно пов'язані: codegolf.stackexchange.com/q/51964/15599
Level River St

1
Я програв кілька хвилин, намагаючись бути розумним з CSS ' transform:rotate(x). Виявляється, це була не яскрава ідея, хто б знав?
Аарон

Відповіді:


1

Perl, 120 119 113 107 104 102 байт

Включає +6 для -0pXi

Виконайте шестикутник на STDIN (прокладений пробілами, тому всі лінії мають однакову довжину) та кількість обертів після -i.

perl -0pXi1 rotagon.pl 
  a b c
 d d e e
f f o g g
 h h i i
  j k l
^D

rotagon.pl

s!(.)!$X=(3*($w=y/
//*2)/4+($-="@-"/$w)-"@+"%$w)/2*--$w+2*$--.25;/^\C{$X}(.)/;$1!eg while$^I--%6

Нарешті отримана матриця обертання буде коротшою, ніж стара подвійна петля


Мені довелося додати прапори aта nпрапори, щоб це працювало.
Ніл

1
@Neil Це потрібно лише для старих версій Perl. В останніх думках -Fмається на увазі, -aа -aв свою чергу мається на увазі-n
Тон Евангеліє

14

Пітон 2, 160 158 156 148 124 124 байт

Підготуйся до враження! Отриманий текст намальовано на полотні ... aTurtle! : D

from turtle import*
h,n=input()
up()
rt(n*60)
l=0
for c in h:
 write(c);fd(9);l-=1
 if" ">c:fd(9*l);rt(90);fd(15);lt(90);l=0

Спробуйте в Інтернеті - також підтримує десяткові обертання!


Якщо ви хочете, щоб черепашка була схожа на одну, можете додати рядок t.shape("turtle") .

Перегляньте історію версій, щоб побачити минулі версії.

Псевдоніми :

up() - penup()

rt() - right()

lt() - left()

fd() - forward()

bk() - backward()

Дякуємо Sherlock9 за пропозиції !


2
Ще 7, поки ти не обіграєш стандартного пітона!
Rɪᴋᴇʀ

@EasterlyIrk Якби тільки t.write('\n')працювали ...
mbomb007

@EasterlyIrk Якби я міг зняти t.up(), я був би там.
mbomb007

Вітаю! Ви б’єте звичайного пітона!
Rɪᴋᴇʀ

6

Python 2.7, 151 байт

h,n=input()
s=1-len(h)
e=enumerate
exec n%6*"h=[''.join(c>' 'and h[y-x-3*s/2>>1][x*2+y*6+s>>2]or c for x,c in e(l))for y,l in e(h)];"
print'\n'.join(h)

Приклад:

% python2.7 hexarot.py <<<'[["   h e x a   ","  g o n s a  "," n d t r i a ","n g l e s m a", " k e m e s a ","  d l y m a  ","   d d e r   "],-1]'
   a a a a   
  x s i m a  
 e n r s s a 
h o t e e m r
 g d l m y e 
  n g e l d  
   n k d d

@ mbomb007 Це не спрацює через порядок операцій, віднімання відбуватиметься перед бітовим зсувом.
FryAmTheEggman

1

JavaScript (ES6), 130 127 байт

f=(s,n)=>n%6?f(s.split`
`.map((s,i,a)=>s.replace(/./g,(c,j)=>(a[(i+z-j)/2+z]||c)[(i+j-z)/2+i]||c,z=a.length>>1)).join`
`,n-1):s

Спочатку грунтувався на моїй відповіді на обертання алмазною плиткою, хоча я, можливо, зараз зможу переписати цю відповідь у рядках цієї відповіді.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.