traintracks
Un solveur pour le puzzle Train Tracks écrit en JavaScript
Dans le Saturday Times (au Royaume-Uni), il y a un puzzle intitulé Train Tracks.
C'est une grille de carrés 8x8. Chaque ligne et colonne comporte un numéro qui vous indique le nombre de pièces contenues dans cette ligne ou colonne.
Il y a aussi un marqueur pour A
et B
le début et la fin de la piste. Il y a peut-être déjà une ou plusieurs autres pièces sur la grille.
Votre travail consiste à dessiner la piste en utilisant uniquement des pièces d'angle droites ou à 90 degrés de A
à B
afin que le nombre correct de pièces soit présent dans chaque ligne et colonne de la grille.
Voici un exemple de puzzle :
Nous codons le puzzle comme suit : <A><B>-<cols>-<rows>-<pieces>
.
Le puzzle ci-dessus est 54-14134544-54234341-48EW.53NE
A
et B
sont les chiffres 1 à 8 indiquant à quelle distance le long de la grille (à partir du coin inférieur gauche) le début (à quelle distance) et l'arrivée (à quelle distance à droite). Dans cet exemple, A
vaut 5
et B
vaut 4
cols
est une liste de 8 nombres 1 à 8 indiquant la contrainte sur la colonne. les chiffres se lisent de gauche à droite (en haut du puzzle, comme illustré).
rows
sont les mêmes pour les lignes, cette fois de haut en bas, ce qui facilite le suivi du vrai puzzle.
pieces
sont la liste des pièces initiales (sans compter le début et la fin) séparées par un point .
et sont <rol><col><type>
où type est la façon dont la pièce pointe. Les types valides sont NS
(vertical) EW
(horizontal) NE
en forme de L, NW
vers l'arrière-L, SE
vers le haut-L, SW
avec rotation de 180 degrés L.
C’est beaucoup plus facile à saisir qu’il n’y paraît. Mais si cela était utilisé sur un site Web, une interface utilisateur plus intuitive pourrait alors créer le puzzle et générer l’encodage.
Quoi qu'il en soit, une fois que nous avons l'encodage, nous pouvons appeler l'outil 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
Et vous pouvez regarder l'algorithme fonctionner en ajoutant --animate
. Voir la vidéo asciinema :
J'ai vu ce Solver AR Sudoku. Il existait de l'art antérieur dans le domaine, mais c'était la première fois que je l'ai vu. Quoi qu'il en soit, j'aime ce petit puzzle et je me demandais si a) je pouvais faire la même chose, et b) le rendre entièrement basé sur le Web.
La feuille de route est donc :