traintracks
用 JavaScript 编写的火车轨道谜题求解器
在《周六泰晤士报》(英国)上,有一个名为“火车轨道”的谜题。
这是一个 8x8 的正方形网格。每行和列都有一个数字,告诉您该行或列中有多少块。
还有A
和B
轨道起点和终点的标记。网格上可能已经有一个或多个其他棋子。
您的任务是仅使用从A
到B
直角或 90 度角块来绘制轨道,以便网格的每一行和每一列中存在正确的块数。
这是一个谜题示例:
我们对拼图进行如下编码: <A><B>-<cols>-<rows>-<pieces>
。
上面的拼图是54-14134544-54234341-48EW.53NE
A
和B
是数字 1-8,表示沿着网格(从左下角开始)的起点(向上多远)和结束(向右多远)。在此示例中, A
为5
, B
为4
cols
是 8 个数字 1-8 的列表,指示列上的约束。数字从左到右读取(沿着拼图的顶部,如图所示)。
rows
对于行来说是相同的,这次是从上到下,这使得从真正的谜题中更容易理解。
pieces
是由点分隔的初始件的列表(不计算开始和结束) .
和 是<rol><col><type>
其中 type 是块指向的方式。有效类型为NS
(垂直) EW
(水平) NE
L 形、 NW
后向 L、 SE
上向 L、 SW
180 度旋转 L。
输入起来比听起来容易得多。但如果在网站上使用它,则更直观的 UI 可以创建谜题并生成编码。
无论如何,一旦我们有了编码,我们就可以调用traintracks
工具:
$ traintracks 54-14134544-54234341-48EW.53NE
Puzzle: 54-14343245-14134544-48EW.53NE
1 4 1 3 4 5 4 4 1 4 1 3 4 5 4 4
┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┬─┬─┬─┐
8 │ │ │ │━│ │ │ │ │ 5 8 │ │┏│━│━│━│┓│ │ │ 5
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
7 │ │ │ │ │ │ │ │ │ 4 7 │ │┃│ │ │ │┗│━│┓│ 4
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
6 │ │ │ │ │ │ │ │ │ 2 6 │ │┃│ │ │ │ │ │┃│ 2
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
A │━│ │ │ │ │ │ │ │ 3 A │━│┛│ │ │ │ │ │┃│ 3
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
4 │ │ │ │ │ │ │ │ │ 4 4 │ │ │ │ │┏│━│━│┛│ 4
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
3 │ │ │ │ │┗│ │ │ │ 3 3 │ │ │ │ │┗│━│┓│ │ 3
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
2 │ │ │ │ │ │ │ │ │ 4 2 │ │ │ │┏│━│━│┛│ │ 4
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
1 │ │ │ │┃│ │ │ │ │ 1 1 │ │ │ │┃│ │ │ │ │ 1
└─┴─┴─┴─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┴─┴─┴─┘
1 2 3 B 5 6 7 8 1 2 3 B 5 6 7 8
Solved: true - Steps: 323
您可以通过添加--animate
来观看算法的工作。请参阅 asciinema 视频:
我看到了这个 AR 数独解算器。该领域已有现有技术,但这是我第一次看到。不管怎样,我喜欢这个小谜题,并且想知道是否a)我可以做同样的事情,b)使其完全基于网络。
所以路线图是: