Votre tâche consiste à créer une séquence aléatoire de mouvements, qui peut être utilisée pour brouiller un Rubik's Cube. Une telle bousculade est composée d'exactement 25 coups. Chaque mouvement se compose des lettres UDRLFB
éventuellement suivies d'un des suffixes '2
.
Cette notation est appelée notation Singmaster. UDRLFB
représente l'une des 6 faces et le suffixe optionnel '2
représente l'angle de rotation. Ces informations ne sont en aucun cas nécessaires pour résoudre la tâche.
Pour garantir que les brouillages sont de «bonne qualité», les deux règles suivantes doivent s'appliquer:
Deux coups consécutifs ne doivent pas avoir la même lettre. Cela interdit les mouvements consécutifs
UU
,DD
,RR
,LL
,FF
etBB
et toutes les combinaisons possibles en utilisant les suffixes en option commeU2U
ouU'U'
.Ces paires de mouvements sont interdites, car elles peuvent facilement être réduites à 1 ou 0 mouvement.
U2U
a le même effet queU'
,R'R
le même effet que.
Trois coups consécutifs ne doivent pas être du même groupe de lettres. Les groupes de lettres sont
UD
,RL
etFB
. Cette règle interdit en outre les mouvements consécutifsUDU
,DUD
,RLR
,LRL
,FBF
,BFB
et toutes les combinaisons possibles en utilisant les suffixes en option commeU2DU
,RL'R
ouB2FB'
.Les groupes trient les faces selon leur axe de déplacement.
U
etD
sont dans le même groupe, car les deux tournent autour du même axe. Par conséquent, unU
mouvement n'influence pas les morceaux duD
visage, et unD
mouvement n'influence pas les morceaux duU
visage. Par conséquent, les deux mouvements peuvent être échangés,UDU
ont le même effet queUUD
, et cela peut être réduit àU2D
.
Défi
Écrivez un script ou une fonction, qui génère un brouillage aléatoire. Il n'y a aucune entrée. Le script / la fonction doit imprimer les 25 mouvements sans séparation ou séparés par un espace ou retourner la chaîne correspondante.
Votre programme doit être capable de créer chaque brouillage unique, ce qui satisfait aux règles ci-dessus. Bien sûr, en supposant que le générateur de nombres aléatoires est vraiment aléatoire et non pseudo aléatoire.
C'est du code-golf. Le code le plus court (compté en octets ) l'emporte.
Exemples de sorties:
Appeler le script / la fonction 3 fois devrait imprimer / retourner quelque chose comme:
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
Si vous séparez les mouvements par un espace chacun:
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'
Notez que toutes ces sorties se composent de 25 mouvements, mais ont des longueurs différentes, en raison des suffixes facultatifs. Il n'est pas autorisé d'imprimer un espace lorsque l'un 2
ou l' autre ou '
sont utilisés comme suffixe. Vous devez imprimer L2UR2F'R'U2
ou L2 U R2 F' R' U2
. L2U R2F'R'U2
n'est pas autorisé.
L2U R2F'R'U2
. U
n'a pas de suffixe facultatif et ne devrait donc pas avoir d'espace. Un espace ne doit pas remplacer le suffixe facultatif.
U F2 L D2 R'...
, par exemple? Dans ce cas, il n'y a pas d' espace supplémentaire , ce qui devrait être correct selon votre règle.
UR 2
n'est pas autorisé?U R2
devrait être autorisé, je pense, car les espaces entre les mouvements ont du sens.