Eine Zugfolge ist eine Folge von Zügen (Runden) auf einem Zauberwürfel (die Notation finden Sie unten). Neben der leeren Bewegungssequenz gibt es noch viele andere Bewegungssequenzen, die sich überhaupt nicht auf den Würfel auswirken. Wir nennen diese Bewegungssequenzen Identitätssequenzen.
Einige dieser Identitätssequenzen sind offensichtlich zu bestimmen, wie U2 R R' U2
oder U D2 U' D2
. Im ersten werden zwei zufällige Züge ausgeführt U2 R
und anschließend sofort rückgängig gemacht R' U2
. Der zweite ist ähnlich. Die ersten zwei zufälligen Züge U D2
und danach werden sie rückgängig gemacht, jedoch in umgekehrter Reihenfolge U' D2
. Dies funktioniert nur, weil die Verschiebung U
nur die Teile der oberen Ebene und die Verschiebung D2
nur die Teile der unteren Ebene beeinflusst. Sie sehen eine Visualisierung dieser beiden Bewegungsabläufe.
Andere Identitätssequenzen sind möglicherweise überhaupt nicht offensichtlich. Zum Beispiel die Reihenfolge R' U' R' F' U F U' R' F R F' U' R U2 R
. Es ist ziemlich lang, hat aber auch überhaupt keine Wirkung auf den Würfel.
Notation verschieben
Ein Zug beschreibt die Drehung einer Schicht von einer der sechs Seiten des Würfels. Ein Zug besteht aus einem Buchstaben für das Gesicht, gefolgt von einem optionalen Suffix für den Drehwinkel.
Die Buchstaben und ihre entsprechenden Flächen sind U (oben - die Seite zeigt nach oben), D (unten - die Seite zeigt nach unten), R (rechts - die Seite zeigt nach rechts), L (links - die Seite zeigt nach links) , F (Vorderseite - die Ihnen zugewandte Seite) und B (Rückseite - die von Ihnen abgewandte Seite).
Wenn es kein Suffix gibt, wird das Gesicht um 90 Grad im Uhrzeigersinn gedreht, das Suffix '
bedeutet, das Gesicht wird um 90 Grad gegen den Uhrzeigersinn gedreht, und das Suffix 2
bedeutet, das Gesicht wird um 180 Grad im Uhrzeigersinn gedreht.
Wenn Sie Probleme mit der Notation haben, verwenden Sie einfach http://alg.cubing.net , wo Sie solche Bewegungsabläufe visualisieren können.
Die Herausforderung
Ihre Aufgabe ist es, ein Programm zu schreiben, das feststellt, ob eine Bewegungssequenz eine Identität ist oder nicht.
Sie können ein vollständiges Programm oder eine Funktion schreiben. Als Eingabe (über STDIN, Befehlszeilenargument, Eingabeaufforderung oder Funktionsargument) und als Ausgabe (über Rückgabewert oder STDOUT) einen booleschen Wert oder eine entsprechende Ganzzahl ( True - 1 - Identitätssequenz / False - 0 - nicht Identitätssequenz).
Wenn das Suffix '
Probleme in Ihrer Programmiersprache verursacht, können Sie ein anderes Symbol verwenden, jedoch nicht eine Ziffer. R F2 U3
ist nicht erlaubt.
Dies ist Codegolf, daher gewinnt der kürzeste Code (in Bytes).
Testfälle
"" -> True
"U2 R R' U2" -> True
"U D2 U' D2" -> True
"U2 R U2 R'" -> False
"R' U' R' F' U F U' R' F R F' U' R U2 R" -> True
"L'" -> False
"B B2 B' B2" -> True
"D D2 D'" -> False
"R F' D2 U B' F2 B' U2 D2 F2 B2 U F R'" -> True
"D2 U' R2 U F2 D2 U' R2 U' B' L2 R' B' D2 U B2 L' D' R2" -> False
"R U R' U' R' F R2 U' R' U' R U R' F' R2 U R2 U' R2 U' D R2 U' R2 U R2 D'" -> True
"R U R' U' R' F R2 U' R' U' R U R' F' R2 U' R2 U R2 U' D R2 U' R2 U R2 D'" -> False
"B2 F2 U' F2 U R2 F2 U2 B D' R' D' R2 D' F2 U' F U R2 U R B D B D2 L2 D' F2 U D' R' D B R2 D2 F2 R' F2 D2" -> True
"R U2 R' U R' U2 R U2 R U R' U' R' U R U2" -> False
"U F B' R' U F' R U' F' B L U' F L'" -> False
"R2 U' R' U' R U R U R U' R" -> False
"R' F R' B2 R F' R' B2 R2" -> False
U3
, könntest du das Suffix einfach in eine Ziffer umwandeln.
R2 D2
.
That is F(orward), B(ackward), L(eft), R(ight), U(p), D(own)
R F2 U3
?