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