我们可以按如下方式将Rubik's Cube表示为网络(求解时):
WWW
WWW
WWW
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
YYY
YYY
YYY
每个字母代表相应的颜色(W
白色,G
绿色等)
它已被证明有恰好(〜百万的三次方)不同的排列,一个魔方可以英寸
你的任务是把一个整数之间和和输出对应的置换,在上述所示的方式。您可以选择排列的顺序,但是必须显示您使用的算法为每个可能的输入生成唯一且正确的排列。
无效的排列规则
取自此页面
首先,每个3x3面的中心必须保持相同,因为魔方立方体上的中心正方形无法旋转。可以旋转整个多维数据集,更改面的显示位置,但这不会影响多维数据集的网格。
如果我们说每个置换都有一个奇偶校验,那么根据达到该置换的交换次数的奇偶校验,我们可以说
每个角件都有三个可能的方向。可以正确地设置其方向(0),顺时针(1)或逆时针(2)。拐角方向的总和始终保持为3的整数倍
魔方上的每次合法旋转都总是翻转偶数个边,因此不会只有一个方向错误。
考虑到所有拐角和边缘的排列,整体奇偶校验必须为偶数,这意味着每个合法举动始终执行相等数量的互换(忽略方向)
例如,以下三个网是无效的输出:
WWW
WWW
WWW
GGGWWWBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
YYY
YYY
YYY
(Too many whites/not enough reds)
WRW
WRW
WRW
GGGRWRBBBOOO
GGGWRRBBBOOO
YYGRWROOOBBB
YYY
GGY
YYY
(There are two red/green center squares and no white/yellow center squares.
In all valid permutations, the center squares are all different colours)
WWW
WWW
WWW
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBOYOO
YYY
YYY
YYB
(The yellow/orange/blue corner is rotated into an impossible permutation)
规则
- 您必须以自己希望的方式证明该算法有效。只要证明算法的有效性,就不必枚举每个排列。
- 您的答案中必须包含某种形式的有效性证明。除列举所有可能性外,该证明可以任何公认的证明方法证明其有效性。
- 您可以根据需要选择使用其他输入法,只要:
- 输入是有界的
- 每个输入对应一个唯一的输出
- 您清楚地解释了输入格式及其与每个输出的对应关系
- 您可以更改用于使用6个不同ASCII字符(在33(
!
)和126(~
)之间)的字符,而不是WGRBOY
- 您可以以任何希望的方式输出,只要它可以清晰显示多维数据集,就能显示所有6个面,包括任何有效的多维数据集网,单行字符串或3D渲染。如果您不确定特定格式,请随时在评论中提问。
这是一个代码高尔夫球,因此每种语言中以字节为单位的最短代码胜出。
有效输出示例
YYY
YYY
YYY
GGGRRRBBBOOO
GGGRRRBBBOOO
GGGRRRBBBOOO
WWW
WWW
WWW
(The `W` and `Y` faces have been swapped)
ZZZ
+++
+}}
+[[}77ZZ7bbb
bb[}[[7}}+Z7
bb[}++[}}+Z7
7bb
[7Z
[7Z
(To start with, the colours have been mapped W -> +, G -> b, R -> [, B -> }, O -> Z and Y -> 7.
Then, the moves L, R, U and F' have been applied, in that order.
Notice that each centre square is different, and corresponds to the same colour as in the mapping)