Sekwencja ruchów jest sekwencją ruchów (zakrętów) na Kostce Rubika (notacja znajduje się poniżej). Oprócz pustej sekwencji ruchów istnieje wiele innych sekwencji ruchów, które nie mają żadnego wpływu na kostkę. Te sekwencje ruchów nazywamy sekwencjami tożsamości.
Niektóre z tych sekwencji identyczności są oczywiste do ustalenia, jak U2 R R' U2
lub U D2 U' D2
. W pierwszym wykonywane są dwa losowe ruchy, U2 R
a następnie natychmiast cofane R' U2
. Drugi jest podobny. Pierwsze dwa losowe ruchy, U D2
a następnie cofane, ale w odwrotnej kolejności U' D2
. Działa to tylko, ponieważ ruch U
wpływa tylko na kawałki górnej warstwy, a ruch D2
tylko na kawałki dolnej warstwy. Możesz zobaczyć wizualizację tych dwóch sekwencji ruchów.
Inne sekwencje tożsamości mogą wcale nie być oczywiste. Na przykład sekwencja R' U' R' F' U F U' R' F R F' U' R U2 R
. Jest dość długi, ale nie ma żadnego wpływu na kostkę.
Przenieś notację
Ruch opisuje obrót jednej warstwy jednej z sześciu ścian sześcianu. Ruch składa się z jednej litery reprezentującej twarz, po której następuje opcjonalny przyrostek reprezentujący kąt obrotu.
Litery i odpowiadające im twarze to U (w górę - strona skierowana w górę), D (w dół - strona skierowana w dół), R (w prawo - strona skierowana w prawo), L (w lewo - strona skierowana w lewo) , F (przód - strona skierowana do ciebie) i B (tył - strona skierowana od siebie).
Jeśli nie ma przyrostka, twarz jest obrócona o 90 stopni w prawo, przyrostek '
oznacza, twarz jest obrócona o 90 stopni w lewo, a przyrostek 2
oznacza, że twarz jest obrócona o 180 stopni w prawo.
Jeśli masz jakieś problemy z notacją, po prostu użyj http://alg.cubing.net , gdzie możesz wizualizować takie sekwencje ruchów.
Wyzwanie
Twoim zadaniem jest napisanie programu, który określa, czy sekwencje ruchu są tożsamością, czy nie.
Możesz napisać pełny program lub funkcję. Powinien otrzymać ciąg zawierający sekwencję ruchów (ruchy są oddzielone spacjami) jako dane wejściowe (przez STDIN, argument wiersza poleceń, argument zachęty lub funkcji), a dane wyjściowe (przez wartość zwracaną lub STDOUT) mają wartość logiczną lub odpowiednią liczbę całkowitą ( Prawda - 1 - sekwencja tożsamości / Fałsz - 0 - brak sekwencji tożsamości).
Jeśli sufiks '
powoduje problemy w języku programowania, możesz użyć innego symbolu, ale nie cyfrowo. R F2 U3
nie jest dozwolone.
Jest to codegolf, dlatego wygrywa najkrótszy kod (w bajtach).
Przypadki testowe
"" -> 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
, to możesz po prostu dodać sufiks do cyfry.
R2 D2
.
That is F(orward), B(ackward), L(eft), R(ight), U(p), D(own)
R F2 U3
?