Sua tarefa é criar uma sequência aleatória de movimentos, que pode ser usada para embaralhar um cubo de Rubik. Essa disputa é composta de exatamente 25 movimentos. Cada movimento consiste nas letras UDRLFBseguidas opcionalmente por um dos sufixos '2.
Essa notação é chamada de notação Singmaster. UDRLFBrepresenta uma das 6 faces e o sufixo opcional '2representa o ângulo de viragem. Esta informação não é necessária para resolver a tarefa.
Para garantir que as disputas sejam de 'boa qualidade', as duas regras a seguir devem ser aplicadas:
Dois movimentos consecutivos não devem ter a mesma letra. Esta proíbe os lances consecutivos
UU,DD,RR,LL,FFeBBe todas as suas combinações usando os sufixos opcionais comoU2UouU'U'.Esses pares de movimentos são banidos porque podem ser facilmente reduzidos a 1 ou 0 movimentos.
U2Utem o mesmo efeito queU',R'Ro mesmo efeito que.Três jogadas consecutivas não devem ser do mesmo grupo de letras. Os grupos de letras são
UD,RLeFB. Esta regra também proíbe os lances consecutivosUDU,DUD,RLR,LRL,FBF,BFBe todas as suas combinações usando os sufixos opcionais comoU2DU,RL'RouB2FB'.Os grupos classificam as faces pelo seu eixo de movimento.
UeDestão no mesmo grupo, porque ambos giram em torno do mesmo eixo. Portanto, umUmovimento não influencia os pedaços doDrosto, e umDmovimento não influencia os pedaços doUrosto. Portanto, os dois movimentos podem ser trocados,UDUtêm o mesmo efeito queUUD, e isso pode ser reduzido paraU2D.
Desafio
Escreva um script ou uma função que gere uma disputa aleatória. Não há entrada. O script / função deve imprimir os 25 movimentos sem separação ou separados por um espaço ou retornar a sequência correspondente.
Seu programa deve ser capaz de criar todos os embaralhamento, o que satisfaz as regras acima. Obviamente, assumindo que o gerador de números aleatórios é verdadeiro aleatório, e não pseudo-aleatório.
Isso é código-golfe. O código mais curto (contado em bytes ) vence.
Exemplos de saídas:
Chamar o script / função 3 vezes deve imprimir / retornar 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
Se você separar os movimentos por um espaço cada:
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'
Observe que todas essas saídas consistem em 25 movimentos, mas têm comprimentos diferentes, devido aos sufixos opcionais. Não é permitido imprimir um espaço, quando um 2ou 'é usado como sufixo. Você tem que imprimir L2UR2F'R'U2ou L2 U R2 F' R' U2. L2U R2F'R'U2não é permitido.
L2U R2F'R'U2. Unão possui sufixo opcional e, portanto, não deve ter espaço. Um espaço não deve substituir o sufixo opcional.
U F2 L D2 R'..., por exemplo? Nesse caso, não há um espaço extra , que eu acho que deveria ficar bem de acordo com sua regra.
UR 2não é permitido?U R2deve ser permitido, acho, já que os espaços entre os movimentos fazem sentido.