Ваше завдання - створити випадкову послідовність рухів, яку можна використати для того, щоб скремтувати кубик Рубіка. Така сутичка складається рівно з 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
треба дозволити, я думаю, оскільки пробіли між рухами мають сенс.