HexaGolf: Rotatagons


15

Lihat juga: Wordagons

Tantangan

Diberikan segi enam dan angka nsebagai input, output hexagon yang sama diputar nkali.

Segi enam

Segi enam akan menjadi string seperti ini:

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

Segi enam akan selalu teratur dan hanya akan berisi karakter ASCII yang dapat dicetak:

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

Rotasi

Untuk menemukan berapa banyak memutar hexagon, kalikan ndengan 60 derajat untuk mendapatkan sudut rotasi. Misalnya, menggunakan segi enam di atas, jika n2, kita kalikan dengan 60 untuk mendapatkan 120 derajat. Kemudian, kami memutar segi enam sebanyak 120 derajat:

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

Perhatikan bahwa setiap sisi telah bergerak dua sisi searah jarum jam.

Jika npositif, Anda harus memutar hexagon searah jarum jam. Jika nnegatif, Anda harus memutar hexagon berlawanan arah jarum jam.

n akan selalu menjadi bilangan bulat dalam rentang -6 hingga 6 inklusif.

Contohnya

Memasukkan:

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

n = 3

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

Memasukkan:

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

n = -1

Keluaran:

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

Memasukkan:

   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

Keluaran:

   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

Kemenangan

Program terpendek dalam byte menang.


2
Apa yang Anda miliki terhadap segitiga? : P
Conor O'Brien

4
@ ConorO'Brien Apakah Anda tidak melihat betapa berbahayanya poin mereka? ;)
Beta Decay

Bisakah kita mengambil input sebagai daftar baris? Bisakah kita berasumsi input ruang-empuk?
Lynn


1
Saya kehilangan beberapa menit mencoba menjadi sok pintar dengan CSS ' transform:rotate(x). Ternyata itu bukan ide yang cemerlang, siapa yang akan tahu?
Aaron

Jawaban:


1

Perl, 120 119 113 107 104 102 byte

Termasuk +6 untuk -0pXi

Jalankan dengan hexagon pada STDIN (diisi dengan spasi sehingga semua garis memiliki panjang yang sama) dan jumlah rotasi setelah -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

Akhirnya mendapat matriks rotasi lebih pendek dari loop ganda yang lama


Saya harus menambahkan tanda adan nuntuk membuatnya berfungsi.
Neil

1
@Neil Itu hanya diperlukan pada versi perl yang lama. Dalam perls baru-baru ini -Fmenyiratkan -adan -apada gilirannya menyiratkan-n
Ton Hospel

14

Python 2, 160 158 156 148 124 byte

Bersiaplah untuk kagum! Teks yang dihasilkan digambar di atas kanvas ... olehTurtle! : 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

Cobalah online - Mendukung rotasi desimal juga!


Jika Anda ingin kura-kura berbentuk seperti itu, Anda bisa menambahkan garisnya t.shape("turtle").

Lihat riwayat revisi untuk melihat versi sebelumnya.

Alias ​​digunakan :

up() - penup()

rt() - right()

lt() - left()

fd() - forward()

bk() - backward()

Terima kasih kepada Sherlock9 untuk sarannya !


2
7 lagi sampai Anda mengalahkan python standar!
Rɪᴋᴇʀ

@EasterlyIrk Jika hanya t.write('\n')bekerja ...
mbomb007

@EasterlyIrk Jika saya bisa menghapus t.up(), saya akan berada di sana.
mbomb007

Selamat! Anda mengalahkan python normal!
Rɪᴋᴇʀ

6

Python 2.7, 151 byte

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)

Contoh:

% 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 Itu tidak akan berfungsi karena urutan operasi, pengurangan akan terjadi sebelum bithift.
FryAmTheEggman

1

JavaScript (ES6), 130 127 byte

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

Awalnya berdasarkan jawaban saya untuk Memutar ubin berlian meskipun sekarang saya mungkin bisa menulis ulang jawaban itu di sepanjang baris jawaban ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.