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