Jedes reguläre Sechseck kann zum Beispiel wie folgt mit Diamanten gekachelt werden (gestohlen aus dieser Frage ):
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Wir betrachten das Obige als Kacheln der Größe 1 (da die Seiten der Diamanten jeweils aus einem / oder \ bestehen). Die gleiche Kachelung von Größe 2 würde so aussehen:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Ihre Aufgabe ist es, Diamantkacheln um ein Vielfaches von 60 Grad zu drehen. Die Raute in der Eingabe kann eine beliebige Größe haben (und die Größe wird in der Eingabe nicht explizit angegeben). Aber es wäre immer eine gültige Kachelung, und alle Seiten des Sechsecks hätten die gleiche Länge.
Dies sind die obigen Beispiele, die um 60 Grad im Uhrzeigersinn gedreht wurden:
______
/_/\_\_\
/\_\/_/\_\
/\/_/\_\/_/\
\/\_\/_/_/\/
\/_/\_\_\/
\_\/_/_/
____________
/ /\ \ \
/___/ \___\___\
/\ \ / /\ \
/ \___\/___/ \___\
/\ / /\ \ / /\
/ \/___/ \___\/___/ \
\ /\ \ / / /\ /
\/ \___\/___/___/ \/
\ / /\ \ \ /
\/___/ \___\___\/
\ \ / / /
\___\/___/___/
Die Eingabe ist eine nicht negative Ganzzahl und eine Raute. Ihr Programm (oder Ihre Funktion) sollte es um die ganze Zahl * 60 Grad drehen. Sie entscheiden, ob Sie im oder gegen den Uhrzeigersinn drehen möchten, sofern dies konsistent ist. Sowohl die Eingabe als auch die Ausgabe sollten keine zusätzlichen führenden oder nachfolgenden Leerzeichen enthalten.
Das ist Code-Golf. Kürzester Code gewinnt.
Verwandte Fragen:
quelle
Antworten:
Pyth, 81 Bytes
Probieren Sie es online aus
Dreht sich gegen den Uhrzeigersinn.
Jede 60 ° -Drehung wird unter Verwendung des folgenden Algorithmus ausgeführt. Angenommen, die Eingabe ist ein Sechseck der Ordnung k , also hat sie 2⋅ k + 1 Zeilen und 4⋅ k Spalten. Um das gedrehte Zeichen in Zeile i Spalte j zu finden , lassen Sie
Dann ist das Ausgabezeichen
\
, wenn die Eingabe/
in Zeile ( u + 1) / 2 Spalte ( v + 1) / 2 hat; sonst/
, wenn der Eingang_
in Zeile u / 2 Spalte v / 2 oder Zeile u / 2 Spalte ( v + 2) / 2 hat; sonst_
, wenn der Eingang\
Zeile ( u + 2) / 2 Spalte v / 2 oder Zeile ( u + 1) / 2 Spalte ( v - 1) / 2 hat; sonst(Wir zählen keine Zeichen bei Indizes mit halben ganzen Zahlen.)
quelle
\
s haben, es sind nur die_
s, die Sie an beiden Stellen überprüfen müssen.\
s befinden, aber möglicherweise müssen Sie zwei_
s für jede ziehen\
.JavaScript (ES6),
452356315 ByteWobei
\n
das wörtliche Zeilenumbruchzeichen darstellt. Bearbeiten: 96 Bytes gespart, da mein Algorithmus die Anzahl und Größe der Diamanten nicht separat kennen muss, plus ein paar kleinere Golfer, die ich beim ersten Mal verpasst habe. Durch Umstellen des Codes wurden 41 Bytes gespart, sodass das Ziel immer dasselbe Zeichenpaar war, sowie ein geringfügiger Fehler, den ich bei der Umstellung auf meinen vorherigen Algorithmus verpasst habe.Code-Snippet anzeigen
Erläuterung: der Ansicht , jedes Paar von Ausgangs Zeichen, die sein könnte
__
,/_
,_\
,/
oder\
, für die entsprechenden Zeichen in der Eingabe überprüft , die mit diesen Ausgangs Zeichen abzubilden. Ungolfed:quelle