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, UDRLFBpo których opcjonalnie następuje jeden z przyrostków '2.
Notacja ta nazywa się notacją Singmaster. UDRLFBreprezentuje jedną z 6 ścian, a opcjonalny przyrostek '2reprezentuje 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,FFiBBoraz wszelkie ich kombinacje przy użyciu opcjonalnego przyrostków jakU2UalboU'U'.Te pary ruchów są zbanowane, ponieważ można je łatwo zredukować do 1 lub 0 ruchów.
U2Uma taki sam efekt jakU',R'Rtaki sam efekt jak.Trzy kolejne ruchy nie mogą należeć do tej samej grupy liter. Grupy nas są
UD,RLiFB. Zasada ta zakazuje dodatkowo kolejne ruchyUDU,DUD,RLR,LRL,FBF,BFBi wszystkie ich kombinacje przy użyciu opcjonalnego przyrostków jakU2DU,RL'RlubB2FB'.Grupy sortują twarze według osi ruchu.
UiDnależą do tej samej grupy, ponieważ oba obracają się wokół tej samej osi. DlategoUruch nie wpływa na częściDtwarzy, aDruch nie wpływa na częściUtwarzy. Dlatego te dwa ruchy mogą być wymieniane,UDUma taki sam efekt jakUUDi 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 2czy 'są zastosowania jako przyrostek. Musisz wydrukować L2UR2F'R'U2lub L2 U R2 F' R' U2. L2U R2F'R'U2nie jest dozwolone.
L2U R2F'R'U2. Unie 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 2nie jest dozwolone? Myślę, żeU R2powinno być dozwolone, ponieważ odstępy między ruchami mają sens.