HexaGolf: Rotatagons


15

Voir aussi: Wordagons

Défi

Étant donné un hexagone et un nombre nen entrée, sortez le même hexagone tourné nfois.

Hexagone

L'hexagone sera une chaîne comme ceci:

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

L'hexagone sera toujours régulier et ne contiendra que les caractères ASCII imprimables:

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

Rotation

Pour trouver la rotation de l'hexagone, multipliez npar 60 degrés pour obtenir l'angle de rotation. Par exemple, en utilisant l'hexagone ci-dessus, si nvaut 2, nous multiplions cela par 60 pour obtenir 120 degrés. Ensuite, nous faisons pivoter l'hexagone de 120 degrés:

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

Notez que chaque côté a bougé de deux côtés dans le sens des aiguilles d'une montre.

Si nest positif, vous devez faire pivoter l'hexagone dans le sens des aiguilles d'une montre. Si nest négatif, vous devez faire pivoter l'hexagone dans le sens inverse des aiguilles d'une montre.

n sera toujours un entier compris entre -6 et 6 inclus.

Exemples

Contribution:

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

n = 3

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

Contribution:

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

n = -1

Production:

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

Contribution:

   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

Production:

   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

Gagnant

Le programme le plus court en octets gagne.


2
Qu'avez-vous contre les triangles? : P
Conor O'Brien

4
@ ConorO'Brien Vous n'avez pas vu à quel point leurs points sont dangereux? ;)
Beta Decay

Pouvons-nous prendre la saisie comme une liste de lignes? Pouvons-nous supposer que l'entrée est remplie d'espace?
Lynn


1
J'ai perdu quelques minutes en essayant d'être un smartass avec CSS ' transform:rotate(x). Il s'avère que ce n'était pas une idée brillante, qui aurait su?
Aaron

Réponses:


1

Perl, 120 119 113 107 104 102 octets

Comprend +6 pour -0pXi

Courez avec l'hexagone sur STDIN (rembourré avec des espaces pour que toutes les lignes aient la même longueur) et le nombre de rotations après -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

Enfin, la matrice de rotation est plus courte que l'ancienne boucle double


J'ai dû ajouter les drapeaux aet npour que cela fonctionne.
Neil

1
@Neil Cela n'est nécessaire que sur les anciennes versions de Perl. Dans les perles récentes, cela -Fimplique -aet implique -aà son tour-n
Ton Hospel

14

Python 2, 160 158 156 148 124 octets

Préparez-vous à être étonné! Le texte résultant est dessiné sur une toile ... par unTurtle! :RÉ

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

Essayez-le en ligne - Prend également en charge les rotations décimales!


Si vous préférez que la tortue ait la forme d'une seule, vous pouvez ajouter la ligne t.shape("turtle") .

Affichez l'historique des révisions pour voir les versions antérieures.

Alias ​​utilisés :

up() - penup()

rt() - right()

lt() - left()

fd() - forward()

bk() - backward()

Merci à Sherlock9 pour les suggestions !


2
7 de plus jusqu'à ce que vous battiez le python standard!
Rɪᴋᴇʀ

@EasterlyIrk Si seulement cela t.write('\n')fonctionnait ...
mbomb007

@EasterlyIrk Si je pouvais supprimer t.up(), je serais là.
mbomb007

Félicitations! Vous battez du python normal!
Rɪᴋᴇʀ

6

Python 2.7, 151 octets

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)

Exemple:

% 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 Cela ne fonctionnera pas à cause de l'ordre des opérations, les soustractions auront lieu avant le décalage de bits.
FryAmTheEggman

1

JavaScript (ES6), 130 127 octets

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

Initialement basé sur ma réponse à Rotation d'un carreau de diamant, bien que je puisse maintenant réécrire cette réponse dans le sens de cette réponse.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.