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)使其完全基於網絡。
所以路線圖是: