traintracks
Ein in JavaScript geschriebener Löser für das Train Tracks-Rätsel
In der Saturday Times (im Vereinigten Königreich) gibt es ein Rätsel mit dem Titel „Train Tracks“.
Es ist ein 8x8-Raster aus Quadraten. Jede Zeile und Spalte hat eine Zahl, die angibt, wie viele Teile in dieser Zeile oder Spalte enthalten sind.
Es gibt auch eine Markierung für A
und B
am Anfang und Ende der Strecke. Möglicherweise befinden sich bereits ein oder mehrere andere Teile im Raster.
Ihre Aufgabe besteht darin, die Strecke nur mit geraden oder 90-Grad-Eckstücken von A
nach B
zu zeichnen, sodass in jeder Zeile und Spalte des Rasters die richtige Anzahl an Stücken vorhanden ist.
Hier ist ein Beispielrätsel:
Wir kodieren das Puzzle wie folgt: <A><B>-<cols>-<rows>-<pieces>
.
Das obige Rätsel lautet 54-14134544-54234341-48EW.53NE
A
und B
sind die Zahlen 1-8, die angeben, wie weit entlang des Rasters (von unten links), der Start (wie weit oben) und das Ziel (wie weit rechts) entfernt sind. In diesem Beispiel ist A
5
und B
ist 4
cols
ist eine Liste von 8 Zahlen 1-8, die die Einschränkung für die Spalte angeben. Die Zahlen werden von links nach rechts gelesen (am oberen Rand des Puzzles, wie abgebildet).
Die rows
ist für die Reihen gleich, diesmal von oben nach unten, was es einfacher macht, dem eigentlichen Rätsel zu folgen.
pieces
handelt es sich um die Liste der Anfangsstücke (Start und Ziel nicht mitgezählt), getrennt durch einen Punkt .
und sind <rol><col><type>
wobei Typ die Art ist, in die das Stück zeigt. Die gültigen Typen sind NS
(vertikal), EW
(horizontal), NE
L-förmig, NW
rückwärts-L, SE
auf dem Kopf-L, SW
180 Grad gedreht L.
Das ist viel einfacher einzugeben, als es sich anhört. Wenn dies jedoch auf einer Website verwendet würde, könnte eine intuitivere Benutzeroberfläche das Rätsel erstellen und die Kodierung generieren.
Sobald wir die Kodierung haben, können wir das traintracks
-Tool aufrufen:
$ 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
Und Sie können beobachten, wie der Algorithmus funktioniert, indem Sie --animate
hinzufügen. Sehen Sie sich das Asciinema-Video an:
Ich habe diesen AR-Sudoku-Löser gesehen. Es gab zwar Stand der Technik auf diesem Gebiet, aber dies war das erste, was ich sah. Wie dem auch sei, ich mag dieses kleine Puzzle und frage mich, ob ich a) das Gleiche tun könnte und b) es vollständig webbasiert machen könnte.
Die Roadmap lautet also: