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 UDRLFBopcionalmente seguidas de uno de los sufijos '2.
Esta notación se llama notación Singmaster. UDRLFBrepresenta una de las 6 caras y el sufijo opcional '2representa 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,FFyBBy todas sus combinaciones utilizando los sufijos opcionales comoU2UoU'U'.Estos pares de movimientos están prohibidos, ya que pueden reducirse fácilmente a 1 o 0 movimientos.
U2Utiene el mismo efecto queU',R'Rel mismo efecto que.Tres movimientos consecutivos no deben ser del mismo grupo de letras. Los grupos de letras son
UD,RLyFB. Esta norma, además, prohíbe los movimientos consecutivosUDU,DUD,RLR,LRL,FBF,BFBy todas sus combinaciones utilizando los sufijos opcionales comoU2DU,RL'RoB2FB'.Los grupos ordenan las caras por su eje de movimiento.
UyDestán en el mismo grupo, porque ambos giran alrededor del mismo eje. Por lo tanto, unUmovimiento no influye en las piezas de laDcara, y unDmovimiento no influye en las piezas de laUcara. Por lo tanto, los dos movimientos se pueden intercambiar,UDUtiene 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 2o 'se usan como sufijo. Tienes que imprimir L2UR2F'R'U2o L2 U R2 F' R' U2. L2U R2F'R'U2No se permite.
L2U R2F'R'U2. Uno 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 2que no está permitido?U R2debería permitirse, creo, ya que los espacios entre movimientos tienen sentido.