二十七
Haskell中的魔方解算器。
灵感来自Herbert Kociemba的多维数据集资源管理器.
其主要思想是为每个配置预计算移动次数需要放置组成3x3魔方的27个立方体的某些子集在正确的位置和/或正确的方向。这给出了下限用于在加扰立方体图中进行类似A⋆的搜索。
默认情况下,使用次优的“两阶段”解算器,因为它运行得相当快。它目前在大约一个中解决了1000个随机立方体(均匀分布)分钟。然而,最优解算器速度很慢,需要五分钟解一个随机立方体需要两个小时(平均18步)。
解算器必须预先计算一定数量的查找表,这些查找表可以是存储在文件中。这些表需要15秒钟来计算和称重13MB对于两阶段求解器,将其与大约8小时和2GB进行比较以获得最佳一个!
您可以使用中的校验和检查生成的文件ts-表格.sha256
.压缩存档ts-tables.zip格式
(723MB)的所有预计算表在分支机构中可用可提取数据
通过吉特磅/英尺
.将其解压缩$主页/.27/
,或任何地方(参见下面的用法)。
使用情况摘要
二十七[-p][--strict][-d DIR][--optimal]
- 对于第一次调用,请使用
-第页
预计算不存在的查找表,否则,当二十七
尝试加载它们;
--严格的
立即加载表,否则将“根据需要”加载(因此你也可以发送一个立方体来求解);
-d方向
指定读取和写入表的目录(默认值:$主页/.27/
).
输入是逐行读取的。
线条可以是以下之一:
-
一组(几乎任何)6中的54个字符的字符串(忽略空格)字符。然后每个字符对应于一个facelet的颜色顺序如下所示。
输出:解读它的一系列动作。
Facelet以9为基数进行编号。面0,1,2,3,4,5
对应于U、 左、右、中、右
.
00 01 022005年4月3日06 07 0810 11 12 20 21 22 30 31 32 40 41 4213 14 15 23 24 25 33 34 35 43 44 4516 17 18 26 27 28 36 37 38 46 47 4850 51 5253 54 5556 57 58
-
一个圆点.
然后是一系列移动来扰乱立方体。
基本动作由中的一个字母给出[ULFRBD]
,或其小写相对应的人。每个字母对应于给定面部(上、左、前、右、后、下)。方向是直接注视转向面时确定。
每个基本动作都有一个可选后缀[23']
允许指定一半转弯(例如。,U2乐队
),相当于两个四分之一圈的序列(UU(单位)
),或a逆时针四分之一圈(例如。,3号机组
或U’
)相当于一个序列顺时针方向三个(UUU(用户单位)
).
输出:如果开始应用移动,则对结果立方体的描述从求解的立方体(采用上述格式,带字母ULFRBD公司
作为颜色)。
-
关键字随机的,随机的
.
输出:随机可解决的具有均匀分布的立方体。
-
关键字退出
(或文件结束)终止交互式会话。
例子
初始化
$echo-quit |二十七-p--严格
例子
示例.txt
:
qwqwqw qwq雷雷尔类型雷雷尔qwqwqwqqerqrerer tytytyt重读者ytytyty wqwqwqwqwqwBBBBUBBBB UUUULUUU RRRRRRR DDDDDD LLLLL FFFFDFFFDDDFUDLRB FUFDLLLRR UBLBFDFUD ULBFRULLB RRRLBBRUB UBFFDFDRU(DDDFUDRLB浮雕)111121111 333313333 222232222 444454444 666646666 555565555111111214 223222222 131333333 344444444 555555555 666666666.udddlrrrbfffuddd文件随机的,随机的
然后输出如下:
二十七美元<examples.txtU2 D2 L2 R2 F2 B2楼Facelets[6,18,11](“qtq”)与任何常规立方都不匹配。U D F B L R U2 R2 F2 R2 U2 L2 B2 U'D'B2地下室U L B’L R2 D R U2 F U2 L2 B2 U B2 D’B2 U R2 U L2 R2 UU D L R F B U2 B2 L2 F2 D2 R2 U“D”L2L U’F2 U F2 U L U’L2 D F2 D’F2BBBBUBBBB UUUULUUU RRRRRRR DDDDDD LLLLL FFFFDFFFBDLLUFBUD LBUBLURFL RLBFFBFRU RLFURLR UBDRBRDDU DFBDDDFLF(布尔布杜勒布尔夫)
当前启发式的详细信息
距离估计基于对应于以下内容的陪集元素。
双相
第1阶段
可以存储到第1阶段设定的目标的实际距离,但目前的速度似乎已经足够了。
第2阶段
- 角点排列×UD切片排列(第2阶段)
- UD边缘置换(第2阶段)×UD切片置换(第二阶段)
最优的
- 角方向×边方向×XY切片置换,用于{UD、LR、FB}中的XY
- 角方向×角排列