HexaGolf: Rotatagons

15

Zobacz także: Wordagons

Wyzwanie

Biorąc pod uwagę sześciokąt i liczbę njako dane wejściowe, wysyłaj te same nczasy obrotu sześciokąta .

Sześciokąt

Sześciokąt będzie ciągiem takim:

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

Sześciokąt będzie zawsze regularny i zawsze będzie zawierał tylko drukowalne znaki ASCII:

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

Obrót

Aby dowiedzieć się, o ile obrócić sześciokąt, pomnóż nprzez 60 stopni, aby uzyskać kąt obrotu. Na przykład, używając powyższego sześciokąta, jeśli nwynosi 2, mnożymy to przez 60, aby uzyskać 120 stopni. Następnie obracamy sześciokąt o 120 stopni:

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

Pamiętaj, że każda strona przesunęła się o dwie strony zgodnie z ruchem wskazówek zegara.

Jeśli njest dodatnia, należy obrócić sześciokąt zgodnie z ruchem wskazówek zegara. Jeśli wartość njest ujemna, należy obrócić sześciokąt w kierunku przeciwnym do ruchu wskazówek zegara.

n zawsze będzie liczbą całkowitą z zakresu od -6 do 6 włącznie.

Przykłady

Wejście:

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

n = 3

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

Wejście:

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

n = -1

Wynik:

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

Wejście:

   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

Wynik:

   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

Zwycięski

Najkrótszy program w bajtach wygrywa.

Rozpad beta
źródło
2
Co masz przeciwko trójkątom? : P
Conor O'Brien
4
@ ConorO'Brien Nie widziałeś, jak niebezpieczne są ich punkty? ;)
Beta Decay
Czy możemy przyjmować dane wejściowe jako listę linii? Czy możemy założyć, że dane wejściowe są wypełniane spacją?
Lynn,
1
Bardzo ściśle powiązane: codegolf.stackexchange.com/q/51964/15599
Level River St
1
Straciłem kilka minut, próbując być inteligentnym z CSS transform:rotate(x). Okazuje się, że to nie był dobry pomysł, kto by wiedział?
Aaron,

Odpowiedzi:

1

Perl, 120 119 113 107 104 102 102 bajtów

Obejmuje +6 za -0pXi

Uruchom z sześciokątem na STDIN (wypełniony spacjami, aby wszystkie linie miały tę samą długość) i liczbą obrotów po -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

W końcu matryca obrotu jest krótsza niż stara podwójna pętla

Ton Hospel
źródło
Musiałem dodać flagi ai, naby to zadziałało.
Neil
1
@ Neil To jest potrzebne tylko w starszych wersjach Perla. W ostatnich perlach -Fimplikuje się, -aa -az kolei implikuje-n
Ton Hospel,
14

Python 2, 160 158 156 148 124 bajtów

Przygotuj się na zaskoczenie! Wynikowy tekst jest rysowany na płótnie ... przezTurtle! :RE

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

Wypróbuj online - obsługuje także rotację dziesiętną!


Jeśli wolisz, aby żółw miał taki kształt, możesz dodać linię t.shape("turtle").

Zobacz historię zmian, aby zobaczyć poprzednie wersje.

Użyte pseudonimy :

up() - penup()

rt() - right()

lt() - left()

fd() - forward()

bk() - backward()

Dzięki Sherlock9 za sugestie !

mbomb007
źródło
2
Jeszcze 7, dopóki nie pokonasz standardowego pytona!
Rɪᴋᴇʀ
@EasterlyIrk Gdyby tylko t.write('\n')działał ...
mbomb007
@Elylylyrk Gdybym mógł usunąć t.up(), byłbym tam.
mbomb007
Gratulacje! Bicie normalnego pytona!
Rɪᴋᴇʀ
6

Python 2.7, 151 bajtów

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)

Przykład:

% 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
Lynn
źródło
@ mbomb007 To nie zadziała z powodu kolejności operacji, odejmowanie nastąpi przed przesunięciem bitów.
FryAmTheEggman
1

JavaScript (ES6), 130 127 bajtów

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

Pierwotnie na podstawie mojej odpowiedzi na obrócenie płytki diamentowej, chociaż być może teraz będę mógł przepisać tę odpowiedź zgodnie z tą odpowiedzią.

Neil
źródło