Twoim zadaniem jest stworzenie losowej sekwencji ruchów, których można użyć do szyfrowania Kostki Rubika. Taka walka składa się z dokładnie 25 ruchów. Każdy ruch składa się z liter, UDRLFB
po których opcjonalnie następuje jeden z przyrostków '2
.
Notacja ta nazywa się notacją Singmaster. UDRLFB
reprezentuje jedną z 6 ścian, a opcjonalny przyrostek '2
reprezentuje kąt obrotu. Informacje te nie są w żaden sposób konieczne do rozwiązania zadania.
Aby zapewnić, że jajecznice są „dobrej jakości”, muszą mieć zastosowanie następujące dwie zasady:
Dwa kolejne ruchy nie mogą mieć tej samej litery. Ta zakazuje kolejne ruchy
UU
,DD
,RR
,LL
,FF
iBB
oraz wszelkie ich kombinacje przy użyciu opcjonalnego przyrostków jakU2U
alboU'U'
.Te pary ruchów są zbanowane, ponieważ można je łatwo zredukować do 1 lub 0 ruchów.
U2U
ma taki sam efekt jakU'
,R'R
taki sam efekt jak.
Trzy kolejne ruchy nie mogą należeć do tej samej grupy liter. Grupy nas są
UD
,RL
iFB
. Zasada ta zakazuje dodatkowo kolejne ruchyUDU
,DUD
,RLR
,LRL
,FBF
,BFB
i wszystkie ich kombinacje przy użyciu opcjonalnego przyrostków jakU2DU
,RL'R
lubB2FB'
.Grupy sortują twarze według osi ruchu.
U
iD
należą do tej samej grupy, ponieważ oba obracają się wokół tej samej osi. DlategoU
ruch nie wpływa na częściD
twarzy, aD
ruch nie wpływa na częściU
twarzy. Dlatego te dwa ruchy mogą być wymieniane,UDU
ma taki sam efekt jakUUD
i można to zredukować doU2D
.
Wyzwanie
Napisz skrypt lub funkcję, która generuje jedną losową mieszankę. Brak danych wejściowych. Skrypt / funkcja musi wydrukować 25 ruchów bez separacji lub oddzielonych jedną spacją lub zwrócić odpowiedni ciąg.
Twój program musi być w stanie utworzyć każdą pojedynczą mieszankę, która spełnia powyższe zasady. Oczywiście zakładając, że generator liczb losowych jest prawdziwy losowy, a nie pseudolosowy.
To jest golf golfowy. Najkrótszy kod (liczony w bajtach ) wygrywa.
Przykłady wyników:
Wywołanie skryptu / funkcji 3 razy powinno wydrukować / zwrócić coś takiego:
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
Jeśli oddzielisz ruchy spacjami, każdy:
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'
Zauważ, że wszystkie te dane wyjściowe składają się z 25 ruchów, ale mają różne długości, ze względu na opcjonalne sufiksy. Nie wolno drukować spację, kiedy albo 2
czy '
są zastosowania jako przyrostek. Musisz wydrukować L2UR2F'R'U2
lub L2 U R2 F' R' U2
. L2U R2F'R'U2
nie jest dozwolone.
L2U R2F'R'U2
. U
nie ma opcjonalnego sufiksu i dlatego nie powinien mieć spacji. Spacja nie powinna zastępować opcjonalnego sufiksu.
U F2 L D2 R'...
na przykład generować dane ? W tym przypadku nie ma dodatkowej przestrzeni, która moim zdaniem powinna być w porządku.
UR 2
nie jest dozwolone? Myślę, żeU R2
powinno być dozwolone, ponieważ odstępy między ruchami mają sens.