Une séquence de mouvements est une séquence de mouvements (tours) sur un Rubik's Cube (pour la notation, regardez ci-dessous). À côté de la séquence de déplacement vide, il existe de nombreuses autres séquences de déplacement, qui n'ont aucun effet sur le cube. Nous appelons ces séquences d'identité des séquences de mouvements.
Certaines de ces séquences d'identité sont évidentes à déterminer, comme U2 R R' U2
ou U D2 U' D2
. Dans le premier, deux mouvements aléatoires sont effectués U2 R
et ensuite immédiatement annulés R' U2
. Le second est similaire. Deux premiers mouvements aléatoires U D2
et ensuite ils sont annulés, mais dans l'ordre inverse U' D2
. Cela ne fonctionne que parce que le déplacement U
n'affecte que les morceaux du calque supérieur et que le déplacement n'affecte D2
que les morceaux du calque inférieur. Vous pouvez voir une visualisation de ces deux séquences de mouvements.
D'autres séquences d'identité peuvent ne pas être évidentes du tout. Par exemple la séquence R' U' R' F' U F U' R' F R F' U' R U2 R
. Il est assez long, mais n'a aucun effet sur le cube.
Déplacer la notation
Un coup décrit le tour d'une couche de l'une des six faces du cube. Un mouvement consiste en une lettre représentant le visage suivie d'un suffixe facultatif représentant l'angle de virage.
Les lettres et leurs faces correspondantes sont U (Haut - le côté tourné vers le haut), D (Bas - le côté tourné vers le bas), R (Droite - le côté tourné vers la droite), L (Gauche - le bord tourné vers la gauche) , F (avant - le côté face à vous) et B (arrière - le côté face à vous).
S'il n'y a pas de suffixe, le visage est tourné de 90 degrés dans le sens des aiguilles d'une montre, le suffixe '
signifie, le visage est tourné de 90 degrés dans le sens inverse des aiguilles d'une montre, et le suffixe 2
signifie, le visage est tourné de 180 degrés dans le sens des aiguilles d'une montre.
Si vous avez des problèmes avec la notation, utilisez simplement http://alg.cubing.net , où vous pouvez visualiser de telles séquences de mouvement.
Le défi
Votre tâche consiste à écrire un programme, qui détermine si une séquence de mouvement est une identité ou non.
Vous pouvez écrire un programme complet ou une fonction. Il doit recevoir une chaîne contenant une séquence de déplacement (les déplacements sont séparés par des espaces) en entrée (via STDIN, argument de ligne de commande, invite ou fonction) et sortir (via la valeur de retour ou STDOUT) une valeur booléenne ou un entier correspondant ( Vrai - 1 - séquence d'identité / Faux - 0 - pas de séquence d'identité).
Si votre suffixe '
crée des problèmes dans votre langage de programmation, vous pouvez utiliser un symbole différent, mais pas à digit. R F2 U3
n'est pas autorisé.
C'est codegolf, donc le code le plus court (en octets) l'emporte.
Cas de test
"" -> 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
, vous pouvez simplement transposer le suffixe en chiffres.
R2 D2
.
That is F(orward), B(ackward), L(eft), R(ight), U(p), D(own)
R F2 U3
?