HexaGolf: Rotatagons


15

Siehe auch: Wordagons

Herausforderung

Wenn Sie ein Sechseck und eine Zahl nals Eingabe angeben, geben Sie dasselbe Sechseck nzweimal gedreht aus .

Hexagon

Das Sechseck ist eine Zeichenfolge wie folgt:

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

Das Sechseck ist immer regelmäßig und enthält immer nur die druckbaren ASCII-Zeichen:

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

Drehung

Um herauszufinden, um wie viel das Sechseck gedreht werden soll, multiplizieren Sie es nmit 60 Grad, um den Drehwinkel zu erhalten. Wenn Sie beispielsweise das obige Sechseck verwenden, nmultiplizieren Sie es mit 60, um 120 Grad zu erhalten. Dann drehen wir das Sechseck um 120 Grad:

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

Beachten Sie, dass jede Seite zwei Seiten im Uhrzeigersinn verschoben hat .

Wenn npositiv, sollten Sie das Sechskant im Uhrzeigersinn drehen. Wenn nnegativ, sollten Sie das Sechskant gegen den Uhrzeigersinn drehen.

n wird immer eine ganze Zahl im Bereich von -6 bis einschließlich 6 sein.

Beispiele

Eingang:

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

n = 3

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

Eingang:

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

n = -1

Ausgabe:

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

Eingang:

   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

Ausgabe:

   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

Gewinnen

Das kürzeste Programm in Bytes gewinnt.


2
Was hast du gegen Dreiecke? : P
Conor O'Brien

4
@ ConorO'Brien Hast du nicht gesehen, wie gefährlich ihre Punkte sind? ;)
Beta Decay

Können wir Eingaben als Liste von Zeilen annehmen? Können wir annehmen, dass die Eingabe mit Leerzeichen aufgefüllt ist?
Lynn


1
Ich habe ein paar Minuten bei dem Versuch verloren, mit CSS klug zu werden transform:rotate(x). Es stellte sich heraus, dass dies keine gute Idee war, wer hätte es gewusst?
Aaron

Antworten:


1

Perl, 120 119 113 107 104 102 Bytes

Beinhaltet +6 für -0pXi

Führen Sie mit dem Sechseck auf STDIN (mit Leerzeichen aufgefüllt, damit alle Linien die gleiche Länge haben) und der Anzahl der Umdrehungen nach -i aus.

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

Schließlich wurde die Rotationsmatrix kürzer als die alte Doppelschleife


Ich musste die aund nFlags hinzufügen , um dies zum Laufen zu bringen.
Neil

1
@Neil Das wird nur bei alten Perl-Versionen benötigt. In den letzten Perls -Fimpliziert -aund impliziert -awiederum-n
Ton Hospel

14

Python 2, 160 158 156 148 124 Bytes

Lassen Sie sich überraschen! Der resultierende Text wird auf eine Leinwand gezeichnet ... von aTurtle! : 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

Online testen - Unterstützt auch Dezimalrotationen!


Wenn Sie möchten, dass die Schildkröte die Form einer Schildkröte hat, können Sie die Linie hinzufügen t.shape("turtle").

Zeigen Sie den Revisionsverlauf an, um frühere Versionen anzuzeigen.

Verwendete Aliase :

up() - penup()

rt() - right()

lt() - left()

fd() - forward()

bk() - backward()

Danke an Sherlock9 für die Vorschläge !


2
7 weitere, bis Sie Standard-Python schlagen!
8.

@EasterlyIrk Wenn nur t.write('\n')funktioniert ...
mbomb007

@EasterlyIrk Wenn ich entfernen könnte t.up(), wäre ich da.
mbomb007

Glückwunsch! Sie schlagen normale Python!
9.

6

Python 2.7, 151 Bytes

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)

Beispiel:

% 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 Das funktioniert aufgrund der Reihenfolge der Operationen nicht. Die Subtraktionen werden vor der Bitverschiebung ausgeführt.
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

Ursprünglich auf der Grundlage meiner Antwort auf " Diamantkacheln drehen", obwohl ich diese Antwort jetzt möglicherweise in Anlehnung an diese Antwort umschreiben kann.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.