HexaGolf: Rotatagons


15

Vedi anche: Wordagons

Sfida

Dato un esagono e un numero ncome input, emette gli stessi ntempi ruotati di esagono .

Esagono

L'esagono sarà una stringa in questo modo:

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

L'esagono sarà sempre regolare e conterrà sempre e solo i caratteri ASCII stampabili:

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

Rotazione

Per sapere di quanto ruotare l'esagono, moltiplicalo nper 60 gradi per ottenere l'angolo di rotazione. Ad esempio, usando l'esagono sopra, se nè 2, lo moltiplichiamo per 60 per ottenere 120 gradi. Quindi, ruotiamo l'esagono di 120 gradi:

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

Si noti che ogni lato ha spostato due lati in senso orario.

Se nè positivo, è necessario ruotare l'esagono in senso orario. Se nè negativo, è necessario ruotare l'esagono in senso antiorario.

n sarà sempre un numero intero compreso tra -6 e 6 inclusi.

Esempi

Ingresso:

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

n = 3

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

Ingresso:

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

n = -1

Produzione:

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

Ingresso:

   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

Produzione:

   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

vincente

Vince il programma più breve in byte.


2
Cosa hai contro i triangoli? : P
Conor O'Brien,

4
@ ConorO'Brien Non hai visto quanto sono pericolosi i loro punti? ;)
Beta Decay

Possiamo prendere input come un elenco di righe? Possiamo supporre che l'input sia riempito di spazio?
Lynn,


1
Ho perso qualche minuto cercando di essere uno smartass con i CSS ' transform:rotate(x). Si scopre che non era un'idea brillante, chi l'avrebbe saputo?
Aaron,

Risposte:


1

Perl, 120 119 113 107 104 102 byte

Include +6 per -0pXi

Corri con l'esagono su STDIN (riempito con spazi in modo che tutte le linee abbiano la stessa lunghezza) e il numero di rotazioni dopo -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

Alla fine la matrice di rotazione è stata più corta del vecchio doppio loop


Ho dovuto aggiungere i flag ae nper farlo funzionare.
Neil,

1
@Neil Questo è necessario solo nelle vecchie versioni di perl. Negli ultimi perl -Fimplica -ae, -aa sua volta, implica-n
Ton Hospel

14

Python 2, 160 158 156 148 124 byte

Preparati a stupirti! Il testo risultante viene disegnato su una tela ... da unTurtle! : 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

Provalo online - Supporta anche rotazioni decimali!


Se preferisci che la tartaruga abbia la forma di una, puoi aggiungere la linea t.shape("turtle").

Visualizza la cronologia delle revisioni per visualizzare le versioni precedenti.

Alias ​​utilizzati :

up() - penup()

rt() - right()

lt() - left()

fd() - forward()

bk() - backward()

Grazie a Sherlock9 per i suggerimenti !


2
Ancora 7 fino a quando non batti il ​​pitone standard!
Rɪᴋᴇʀ

@EasterlyIrk Se solo t.write('\n')funzionasse ...
mbomb007

@EasterlyIrk Se potessi rimuovere t.up(), sarei lì.
mbomb007,

Congratulazioni! Stai battendo il normale pitone!
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)

Esempio:

% 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 Che non funzionerà a causa dell'ordine delle operazioni, le sottrazioni avverranno prima del bitshift.
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

Originariamente basato sulla mia risposta a Ruotare una piastrella diamantata, anche se ora potrei essere in grado di riscrivere quella risposta seguendo le linee di questa risposta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.