Ваше завдання - створити випадкову послідовність рухів, яку можна використати для того, щоб скремтувати кубик Рубіка. Така сутичка складається рівно з 25 ходів. Кожен хід складається з літер, UDRLFBнеобов'язково супроводжуваних одним із суфіксів '2.
Ця нотація називається позначенням Singmaster. UDRLFBявляє собою одну з 6 граней, а необов'язковий суфікс '2являє собою кут повороту. Ця інформація жодним чином не потрібна для вирішення поставленого завдання.
Щоб переконатись у тому, що сутички "хорошої якості", повинні застосовуватися наступні два правила:
Два послідовні ходи не повинні мати однакову букву. Це забороняє послідовні кроки
UU,DD,RR,LL,FFіBBвсі їхні комбінації з використанням додаткових суфіксів , якU2UабоU'U'.Ці переміщення пари заборонені, оскільки їх можна легко скоротити до 1 або 0 ходів.
U2Uмає той же ефектU', що іR'Rтой самий ефект, що і.Три послідовні ходи не повинні бути однієї групи літер. Літерні групи
UD,RLіFB. Це правило додатково забороняє послідовні крокиUDU,DUD,RLR,LRL,FBF,BFBі всі їхні комбінації з використанням додаткових суфіксів , якU2DU,RL'RабоB2FB'.Групи сортують грані за їх віссю переміщення.
UіDзнаходяться в одній групі, тому що обидва обертаються навколо однієї осі. ТомуUрух не впливає на частиниDобличчя, аDрух не впливає на частиниUобличчя. Тому два ходи можуть бути обмінені,UDUмає той же ефектUUD, що і це можна звести доU2D.
Виклик
Напишіть сценарій або функцію, яка генерує одну випадкову кодировку. Введення немає. Сценарій / функція повинна надрукувати 25 ходів без відокремлення або розділення одним пробілом або повернення відповідного рядка.
Ваша програма повинна вміти створювати кожну кодировку, яка відповідає правилам, наведеним вище. Звичайно, припускаючи, що генератор випадкових чисел справжній випадковий, а не псевдовипадковий.
Це код-гольф. Виграє найкоротший код (рахується в байтах ).
Приклади виходів:
Викликаючи сценарій / функцію 3 рази, слід надрукувати / повернути щось на кшталт:
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
Якщо розділити ходи пробілом кожен:
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'
Зауважте, що всі ці результати складаються з 25 ходів, але мають різну довжину через необов'язкові суфікси. Не дозволяється друкувати пробіл, коли 2або 'використовується як суфікс. Ви повинні надрукувати L2UR2F'R'U2або L2 U R2 F' R' U2. L2U R2F'R'U2не дозволено.
L2U R2F'R'U2. Uне має необов'язкового суфікса, і тому він не повинен мати пробілу. Пробіл не повинен бути заміною необов’язкового суфікса.
U F2 L D2 R'..., наприклад? У цьому випадку немає зайвого місця, яке, на мою думку, повинно бути нормальним згідно вашого правила.
UR 2це не дозволено?U R2треба дозволити, я думаю, оскільки пробіли між рухами мають сенс.