移动序列是在魔方上的一系列移动(转弯)(在下面的符号中向下查找)。除了空移动序列之外,还有许多其他移动序列,这些移动序列对多维数据集完全没有影响。我们称这些移动序列为同一性序列。
这些身份序列中的某些很明显可以确定,例如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
?