您的任务是创建随机移动序列,该序列可用于加扰魔方。这样的争夺是由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
应该允许这样做,因为动作之间的间隔是合理的。