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 UDRLFB
opzionalmente seguite da uno dei suffissi '2
.
Questa notazione è chiamata la notazione Singmaster. UDRLFB
rappresenta una delle 6 facce e il suffisso opzionale '2
rappresenta 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
,FF
eBB
e tutte le loro combinazioni utilizzando i suffissi opzionali comeU2U
oU'U'
.Queste coppie di mosse sono bandite, perché possono essere facilmente ridotte a 1 o 0 mosse.
U2U
ha lo stesso effetto diU'
,R'R
lo stesso effetto di.
Tre mosse consecutive non devono appartenere allo stesso gruppo di lettere. I gruppi di lettere sono
UD
,RL
eFB
. Questa regola vieta inoltre le mosse consecutiveUDU
,DUD
,RLR
,LRL
,FBF
,BFB
e tutte le loro combinazioni utilizzando i suffissi opzionali comeU2DU
,RL'R
oB2FB'
.I gruppi ordinano le facce in base all'asse di spostamento.
U
eD
fanno parte dello stesso gruppo, poiché entrambi ruotano attorno allo stesso asse. Pertanto unaU
mossa non influenza i pezzi delD
viso e unaD
mossa non influenza i pezzi delU
viso. Pertanto le due mosse possono essere scambiate,UDU
ha lo stesso effetto diUUD
e 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 2
o entrambi '
sono usati come suffisso. Devi stampare L2UR2F'R'U2
o L2 U R2 F' R' U2
. L2U R2F'R'U2
non è permesso.
L2U R2F'R'U2
. U
non 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 2
non è permesso?U R2
dovrebbe essere consentito, credo, poiché gli spazi tra le mosse hanno un senso.