Последовательность ходов - это последовательность ходов (поворотов) кубика Рубика (обозначения см. Ниже). Помимо пустой последовательности ходов, есть много других последовательностей ходов, которые никак не влияют на куб. Мы называем эти ходовые последовательности идентичными последовательностями.
Некоторые из этих последовательностей идентичности очевидно для определения, как U2 R R' U2
или U D2 U' D2
. В первом случае два случайных хода выполняются, U2 R
а затем сразу же отменяются R' U2
. Второй похож. Первые два случайных хода, U D2
а затем они отменяются, но в обратном порядке U' D2
. Это работает только потому, что движение U
влияет только на части верхнего слоя, а движение D2
влияет только на части нижнего слоя. Вы можете увидеть визуализацию этих двух последовательностей ходов.
Другие идентичные последовательности могут быть не очевидны вообще. Например, последовательность R' U' R' F' U F U' R' F R F' U' R U2 R
. Это довольно долго, но также никак не влияет на куб.
Переместить нотацию
Ход описывает поворот одного слоя одной из шести граней куба. Ход состоит из одной буквы, представляющей грань, за которой следует необязательный суффикс, представляющий угол поворота.
Буквы и соответствующие им грани: U (вверх - сторона, обращенная вверх), D (вниз - сторона, обращенная вниз), R (справа - сторона, направленная вправо), L (слева - сторона, обращенная влево) , F (передняя сторона - сторона, обращенная к вам) и B (задняя сторона - сторона, обращенная от вас).
Если суффикса нет, грань поворачивается на 90 градусов по часовой стрелке, суффикс '
означает, грань поворачивается на 90 градусов против часовой стрелки, а суффикс 2
означает, что грань поворачивается на 180 градусов по часовой стрелке.
Если у вас есть какие-либо проблемы с обозначениями, просто используйте http://alg.cubing.net , где вы можете визуализировать такие последовательности перемещения.
Соревнование
Ваша задача - написать программу, которая определяет, является ли последовательность перемещения идентификатором или нет.
Вы можете написать полную программу или функцию. Он должен получить строку, содержащую последовательность перемещений (перемещения разделяются пробелами) в качестве входных данных (через STDIN, аргумент командной строки, аргумент приглашения или функции) и вывести (через возвращаемое значение или STDOUT) логическое значение или соответствующее целое число ( True - 1 - идентификационная последовательность / False - 0 - не идентификационная последовательность).
Если суффикс '
создает проблемы в вашем языке программирования, вы можете использовать другой символ, но не цифру. R F2 U3
не разрешено.
Это Codegolf, поэтому выигрывает самый короткий код (в байтах).
Тестовые случаи
"" -> True
"U2 R R' U2" -> True
"U D2 U' D2" -> True
"U2 R U2 R'" -> False
"R' U' R' F' U F U' R' F R F' U' R U2 R" -> True
"L'" -> False
"B B2 B' B2" -> True
"D D2 D'" -> False
"R F' D2 U B' F2 B' U2 D2 F2 B2 U F R'" -> True
"D2 U' R2 U F2 D2 U' R2 U' B' L2 R' B' D2 U B2 L' D' R2" -> False
"R U R' U' R' F R2 U' R' U' R U R' F' R2 U R2 U' R2 U' D R2 U' R2 U R2 D'" -> True
"R U R' U' R' F R2 U' R' U' R U R' F' R2 U' R2 U R2 U' D R2 U' R2 U R2 D'" -> False
"B2 F2 U' F2 U R2 F2 U2 B D' R' D' R2 D' F2 U' F U R2 U R B D B D2 L2 D' F2 U D' R' D B R2 D2 F2 R' F2 D2" -> True
"R U2 R' U R' U2 R U2 R U R' U' R' U R U2" -> False
"U F B' R' U F' R U' F' B L U' F L'" -> False
"R2 U' R' U' R U R U R U' R" -> False
"R' F R' B2 R F' R' B2 R2" -> False
U3
, то вы могли бы просто преобразовать суффикс в цифру.
R2 D2
.
That is F(orward), B(ackward), L(eft), R(ight), U(p), D(own)
R F2 U3
?