Il tuo compito è creare una sequenza casuale di mosse, che può essere utilizzata per rimescolare un cubo di Rubik. Un tale scramble è composto esattamente da 25 mosse. Ogni mossa consiste in lettere UDRLFBopzionalmente seguite da uno dei suffissi '2.
Questa notazione è chiamata la notazione Singmaster. UDRLFBrappresenta una delle 6 facce e il suffisso opzionale '2rappresenta l'angolo di rotazione. Questa informazione non è in alcun modo necessaria per risolvere l'attività.
Per garantire che i scrambles siano di "buona qualità", devono essere applicate le seguenti due regole:
Due mosse consecutive non devono avere la stessa lettera. Questo vieta le mosse consecutive
UU,DD,RR,LL,FFeBBe tutte le loro combinazioni utilizzando i suffissi opzionali comeU2UoU'U'.Queste coppie di mosse sono bandite, perché possono essere facilmente ridotte a 1 o 0 mosse.
U2Uha lo stesso effetto diU',R'Rlo stesso effetto di.Tre mosse consecutive non devono appartenere allo stesso gruppo di lettere. I gruppi di lettere sono
UD,RLeFB. Questa regola vieta inoltre le mosse consecutiveUDU,DUD,RLR,LRL,FBF,BFBe tutte le loro combinazioni utilizzando i suffissi opzionali comeU2DU,RL'RoB2FB'.I gruppi ordinano le facce in base all'asse di spostamento.
UeDfanno parte dello stesso gruppo, poiché entrambi ruotano attorno allo stesso asse. Pertanto unaUmossa non influenza i pezzi delDviso e unaDmossa non influenza i pezzi delUviso. Pertanto le due mosse possono essere scambiate,UDUha lo stesso effetto diUUDe questo può essere ridotto aU2D.
Sfida
Scrivi uno script o una funzione, che genera uno scramble casuale. Non ci sono input. Lo script / funzione deve stampare le 25 mosse senza separazione o separate da uno spazio o restituire la stringa corrispondente.
Il tuo programma deve essere in grado di creare ogni singolo scramble, che soddisfi le regole di cui sopra. Naturalmente supponendo che il generatore di numeri casuali sia vero casuale e non pseudo casuale.
Questo è code-golf. Vince il codice più breve (conteggiato in byte ).
Esempi di output:
Chiamare lo script / funzione 3 volte dovrebbe stampare / restituire qualcosa del tipo:
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 separi le mosse di uno spazio ciascuna:
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'
Si noti che tutte queste uscite sono composte da 25 mosse, ma hanno lunghezze diverse, a causa dei suffissi opzionali. Non è consentito stampare uno spazio, quando uno 2o entrambi 'sono usati come suffisso. Devi stampare L2UR2F'R'U2o L2 U R2 F' R' U2. L2U R2F'R'U2non è permesso.
L2U R2F'R'U2. Unon ha suffisso opzionale e quindi non dovrebbe avere uno spazio. Uno spazio non dovrebbe essere una sostituzione per il suffisso opzionale.
U F2 L D2 R'..., per esempio? In questo caso, non c'è spazio extra , che secondo me dovrebbe andare bene secondo la tua regola.
UR 2non è permesso?U R2dovrebbe essere consentito, credo, poiché gli spazi tra le mosse hanno un senso.