HexaGolf:Rotagons


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你没看到他们的观点有多危险吗?;)
Beta Decay's

我们可以将输入作为行列表吗?我们可以假设输入是空格吗?
林恩


1
我花了几分钟试图成为CSS的聪明人transform:rotate(x)。原来那不是一个好主意,谁知道呢?
亚伦

Answers:


1

珀尔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

最终使旋转矩阵比旧的双循环短


我必须添加an标志才能使其正常工作。
尼尔

1
@Neil仅在旧的perl版本上才需要。在最近的Perls -F暗示中,-a-a在暗示中暗示-n
Ton Hospel

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个,直到您击败标准python!
Rɪᴋᴇʀ

@EasterlyIrk如果只t.write('\n')工作...
mbomb007 '09

@EasterlyIrk如果可以删除t.up(),我会在那里。
mbomb007'9

恭喜!您在击败普通的python!
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'9

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

最初基于我对“ 旋转菱形平铺”的回答,尽管现在我也许可以按照该回答的方式重写该回答。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.