Ihre Aufgabe ist es, eine zufällige Abfolge von Zügen zu erstellen, mit denen Sie einen Rubik's Cube verschlüsseln können. Ein solches Scramble besteht aus genau 25 Zügen. Jeder Zug besteht aus den Buchstaben, UDRLFB
optional gefolgt von einem der Suffixe '2
.
Diese Notation wird als Singmaster-Notation bezeichnet. UDRLFB
Stellt eine der 6 Flächen dar und das optionale Suffix gibt '2
den Drehwinkel an. Diese Informationen sind in keiner Weise zur Lösung der Aufgabe erforderlich.
Um sicherzustellen, dass die Scrambles von "guter Qualität" sind, müssen die folgenden zwei Regeln gelten:
Zwei aufeinanderfolgende Züge dürfen nicht denselben Buchstaben haben. Dies verbietet die aufeinanderfolgenden bewegt
UU
,DD
,RR
,LL
,FF
undBB
und alle Kombinationen der optionalen Suffixe verwenden , wieU2U
oderU'U'
.Diese Zugpaare sind gesperrt, da sie leicht auf 1 oder 0 Züge reduziert werden können.
U2U
hat den gleichen Effekt wieU'
,R'R
den gleichen Effekt wie.
Drei aufeinanderfolgende Züge dürfen nicht derselben Buchstabengruppe angehören. Die Buchstabengruppen sind
UD
,RL
undFB
. Diese Regel zusätzlich verbietet die aufeinanderfolgenden bewegtUDU
,DUD
,RLR
,LRL
,FBF
,BFB
und alle Kombinationen der optionalen Suffixe wie unter Verwendung vonU2DU
,RL'R
oderB2FB'
.Die Gruppen sortieren die Gesichter nach ihrer Bewegungsachse.
U
undD
befinden sich in derselben Gruppe, da sich beide um dieselbe Achse drehen. Daher beeinflusst eineU
Bewegung nicht die Teile desD
Gesichts und eineD
Bewegung beeinflusst nicht die Teile desU
Gesichts. Daher können die beiden Züge getauscht werden,UDU
hat den gleichen Effekt wieUUD
, und dieser kann auf reduziert werdenU2D
.
Herausforderung
Schreiben Sie ein Skript oder eine Funktion, die ein zufälliges Scramble generiert. Es erfolgt keine Eingabe. Das Skript / die Funktion muss die 25 Züge ohne Trennung oder durch ein Leerzeichen getrennt drucken oder die entsprechende Zeichenfolge zurückgeben.
Ihr Programm muss in der Lage sein, jedes einzelne Scramble zu erstellen, das die oben genannten Regeln erfüllt. Natürlich unter der Annahme, dass der Zufallszahlengenerator ein wahrer Zufall und kein Pseudozufall ist.
Das ist Code-Golf. Der kürzeste Code (in Bytes gezählt ) gewinnt.
Beispiele für Ausgaben:
Wenn Sie das Skript / die Funktion dreimal aufrufen, sollte Folgendes gedruckt / zurückgegeben werden:
R'B2R2F2R2FB'R2DR2ULFB2RB'U2B'FL'BR'U'RB'
U'DBR'B2U'B'U'RUF'B'RDR2U'B'LR'B'F2D2UF2L'
BR2F'B'R'D'R'U2B'F2D2R'F2D'F'D2R2B'L2R'UB'R2L'D
Wenn Sie die Züge jeweils durch ein Leerzeichen trennen:
R2 L' F2 U2 D' R2 L2 F L' D2 U R B D' U2 L B2 L U B2 D U2 R' D2 U'
B R D2 F U2 B' R2 F2 B' U' L' R2 B U2 R' D B' F' U2 R' B' L R D2 R2
B2 R2 U D' B R D' R L2 D2 L2 R B2 F U' F2 B2 U' F U' D F R2 U2 B'
Beachten Sie, dass alle diese Ausgaben aus 25 Zügen bestehen, aber aufgrund der optionalen Suffixe unterschiedliche Längen haben. Es ist nicht erlaubt, ein Leerzeichen zu drucken, wenn entweder 2
oder '
als Suffix verwendet werden. Sie müssen L2UR2F'R'U2
oder drucken L2 U R2 F' R' U2
. L2U R2F'R'U2
ist nicht erlaubt.
L2U R2F'R'U2
. U
hat kein optionales Suffix und sollte daher kein Leerzeichen enthalten. Ein Leerzeichen darf kein Ersatz für das optionale Suffix sein.
U F2 L D2 R'...
zum Beispiel ausgeben ? In diesem Fall gibt es kein zusätzliches Leerzeichen, was nach Ihrer Regel meiner Meinung nach in Ordnung sein sollte.
UR 2
ist nicht erlaubt?U R2
sollte erlaubt sein, denke ich, da abstände zwischen zügen sinnvoll sind.