编写最短的程序,以在合理的时间范围内移动并解决Rubik的多维数据集(3 * 3 * 3)(例如,在您的计算机上最多5秒,而最多移动1000秒)。
输入的格式为:
UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR
(此特定输入表示已解决的多维数据集)。
前12个2个字符的字符串是UF,UR,... BL位置中的边(U =上,F =前,R =右,B =后,L =左,D =下),然后是下8个3个字符的字符串是UFR,URB,... DBR位置中的角。
输出应以这种格式给出一系列移动:
D+ L2 U+ F+ D+ L+ D+ F+ U- F+
其中D1或D +代表将D(下)面顺时针旋转90度,L2代表将L面旋转180度,U3或U-代表将U面逆时针旋转90度。
字母不区分大小写,空格是可选的。
例如,上面的输出对于以下输入是正确的:
RU LF UB DR DL BL UL FU BD RF BR FD LDF LBD FUL RFD UFR RDB UBL RBU
有关更多详细信息,请参阅Tomas Rokicki的多维数据集竞赛,除了计分将直接通过文件大小完成外,就像正常的打高尔夫球问题一样。还包括一个在线测试仪。
供参考,最短的解决方案是多维数据集竞赛获奖者列表中的最后一个条目
对于那些努力使布局格式可视化的人:
0-1 2-3 4-5 6-7 8-9 10-11 12-13 14-15 16-17 18-19 20-21 22-23 24-25-26 27-28-29 30-31-32 33-34-35 36-37-38 39-40-41 42-43-44 45-46-47
UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR
Front:
+-------+-------+-------+
/ / / /|
/ 30 / 4 / 27 / |
+-------+-------+-------+ |
/ / / /|28+
/ 6 / / 2 / | /|
+-------+-------+-------+ |/ |
/ / / /|3 + |
/ 33 / 0 / 24 / | /|21+
+-------+-------+-------+ |/ | /|
| | | |26+ |/ |
| 35 | 1 | 25 | /| + |
| | | |/ | /|47+
+-------+-------+-------+ |/ | /
| | | |17+ |/
| 18 | | 16 | /|11+
| | | |/ | /
+-------+-------+-------+ |/
| | | |37+
| 40 | 9 | 38 | /
| | | |/
+-------+-------+-------+
Hidden faces:
+-------+-------+-------+
/| | | |
/ | 31 | 5 | 29 |
+ | | | |
/|32+-------+-------+-------+
/ | /| | | |
+ |/ | 22 | | 20 |
/|7 + | | | |
/ | /|23+-------+-------+-------+
+ |/ | /| | | |
|34+ |/ | 44 | 13 | 46 |
| /| + | | | |
|/ | /|43+-------+-------+-------+
+ |/ | / / / /
|19+ |/ 42 / 12 / 45 /
| /|15+-------+-------+-------+
|/ | / / / /
+ |/ 14 / / 10 /
|41+-------+-------+-------+
| / / / /
|/ 39 / 8 / 36 /
+-------+-------+-------+