HexaGolf: Ротатагон


15

Смотрите также: Wordagons

Вызов

Если в 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
Конор О'Брайен

4
@ ConorO'Brien Разве ты не видел, насколько опасны их очки? ;)
Бета-распад

Можем ли мы принять входные данные в виде списка строк? Можем ли мы предположить, что ввод заполнен пробелом?
Линн


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. В недавних perls -Fподразумевает -aи -aв свою очередь подразумевает-n
Тон Хоспел

14

Python 2, 160 158 156 148 124 байта

Приготовьтесь удивляться! Полученный текст рисуется на холсте ... пользователемTurtle! : 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 9.09.16

Congrats! Вы бьете нормального питона!
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.