Su tarea es crear una secuencia aleatoria de movimientos, que se puede utilizar para mezclar un cubo de Rubik. Tal revuelo se compone de exactamente 25 movimientos. Cada movimiento consta de las letras UDRLFB
opcionalmente seguidas de uno de los sufijos '2
.
Esta notación se llama notación Singmaster. UDRLFB
representa una de las 6 caras y el sufijo opcional '2
representa el ángulo de giro. Esta información no es necesaria para resolver la tarea.
Para asegurar que las codificaciones son de "buena calidad", deben aplicarse las siguientes dos reglas:
Dos movimientos consecutivos no deben tener la misma letra. Esto prohíbe los movimientos consecutivos
UU
,DD
,RR
,LL
,FF
yBB
y todas sus combinaciones utilizando los sufijos opcionales comoU2U
oU'U'
.Estos pares de movimientos están prohibidos, ya que pueden reducirse fácilmente a 1 o 0 movimientos.
U2U
tiene el mismo efecto queU'
,R'R
el mismo efecto que.
Tres movimientos consecutivos no deben ser del mismo grupo de letras. Los grupos de letras son
UD
,RL
yFB
. Esta norma, además, prohíbe los movimientos consecutivosUDU
,DUD
,RLR
,LRL
,FBF
,BFB
y todas sus combinaciones utilizando los sufijos opcionales comoU2DU
,RL'R
oB2FB'
.Los grupos ordenan las caras por su eje de movimiento.
U
yD
están en el mismo grupo, porque ambos giran alrededor del mismo eje. Por lo tanto, unU
movimiento no influye en las piezas de laD
cara, y unD
movimiento no influye en las piezas de laU
cara. Por lo tanto, los dos movimientos se pueden intercambiar,UDU
tiene el mismo efecto queUUD
, y esto se puede reducir aU2D
.
Reto
Escriba un script o una función que genere una codificación aleatoria. No hay entrada El script / función tiene que imprimir los 25 movimientos sin separación o separados por un espacio o devolver la cadena correspondiente.
Su programa tiene que poder crear cada codificación, que satisfaga las reglas anteriores. Por supuesto, suponiendo que el generador de números aleatorios es verdaderamente aleatorio y no pseudoaleatorio.
Este es el código de golf. El código más corto (contado en bytes ) gana.
Ejemplos de salidas:
Llamar al script / función 3 veces debería imprimir / devolver algo como:
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 separas los movimientos por un espacio cada uno:
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'
Tenga en cuenta que todas estas salidas consisten en 25 movimientos, pero tienen diferentes longitudes, debido a los sufijos opcionales. No está permitido imprimir un espacio, cuando 2
o '
se usan como sufijo. Tienes que imprimir L2UR2F'R'U2
o L2 U R2 F' R' U2
. L2U R2F'R'U2
No se permite.
L2U R2F'R'U2
. U
no tiene sufijo opcional y, por lo tanto, no debe tener un espacio. Un espacio no debe ser un reemplazo para el sufijo opcional.
U F2 L D2 R'...
, por ejemplo? En este caso, no hay un espacio extra , que creo que debería estar bien de acuerdo con su regla.
UR 2
que no está permitido?U R2
debería permitirse, creo, ya que los espacios entre movimientos tienen sentido.