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度を掛けて回転角度を取得します。たとえば、上の六角形を使用して、n2の場合、60を掛けて120度を取得します。次に、六角形を120度回転します。

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

各側面が時計回りに2つの側面を移動していることに注意してください。

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

最後に、回転行列を古い二重ループよりも短くしました


これを機能させるにはanフラグとフラグを追加する必要がありました。
ニール

1
@Neilこれは古いperlバージョンでのみ必要です。最近のperlに-F暗示さ-a-a、順番に暗示される-n
Ton Hospel

14

パイソン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

オンラインで試してください -小数の回転もサポートしています!


亀の形を好む場合、lineを追加できますt.shape("turtle")

改訂履歴を表示して、過去のバージョンを確認します。

使用されるエイリアス

up() - penup()

rt() - right()

lt() - left()

fd() - forward()

bk() - backward()

提案してくれたSherlock9に感謝します!


2
標準のPythonを倒すまであと7回!
Rɪᴋᴇʀ

@EasterlyIrkの場合はt.write('\n')...働いていた
mbomb007

@EasterlyIrk削除できたらt.up()、私はそこにいるでしょう。
mbomb007 16

おめでとうございます!通常の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

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

もともとは、ダイヤモンドタイル回転させるという私の答えに基づいていましたが、今ではこの答えの行に沿ってその答えを書き換えることができるかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.