traintracks
Un solucionador del rompecabezas de Train Tracks escrito en JavaScript
En el Saturday Times (en el Reino Unido), hay un rompecabezas llamado Train Tracks.
Es una cuadrícula de cuadrados de 8x8. Cada fila y columna tiene un número que indica cuántas piezas van en esa fila o columna.
También hay un marcador para A
y B
el inicio y el final de la pista. Posiblemente ya haya una o más piezas en la cuadrícula.
Su trabajo es dibujar la pista usando solo una pieza de esquina recta o de 90 grados de A
a B
para que esté presente la cantidad correcta de piezas en cada fila y columna de la cuadrícula.
Aquí hay un ejemplo de rompecabezas:
Codificamos el rompecabezas de la siguiente manera: <A><B>-<cols>-<rows>-<pieces>
.
El rompecabezas de arriba es 54-14134544-54234341-48EW.53NE
A
y B
son los números del 1 al 8 que indican qué tan lejos en la cuadrícula (desde abajo a la izquierda) están el inicio (qué tan arriba) y el final (qué tan lejos a la derecha). En este ejemplo A
es 5
y B
es 4
cols
es una lista de 8 números del 1 al 8 que indican la restricción de la columna. los números se leen de izquierda a derecha (en la parte superior del rompecabezas como se muestra en la imagen).
rows
son las mismas para las filas, esta vez de arriba a abajo, lo que facilita el seguimiento desde el rompecabezas real.
pieces
son la lista de piezas iniciales (sin contar el inicio y el final) separadas por un punto .
y son <rol><col><type>
donde tipo es la forma en que apunta la pieza. Los tipos válidos son NS
(vertical) EW
(horizontal) NE
en forma de L, NW
hacia atrás-L, SE
hacia arriba-L, SW
girado 180 grados en L.
Esto es mucho más fácil de escribir de lo que parece. Pero si esto se usara en un sitio web, entonces una interfaz de usuario más intuitiva podría crear el rompecabezas y generar la codificación.
De todos modos una vez que tengamos la codificación podemos llamar a la herramienta 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
Y puedes ver cómo funciona el algoritmo agregando --animate
. Vea el vídeo de asciinema:
Vi este AR Sudoku Solver. Ha habido técnica anterior en el campo, pero esta fue la primera que vi. De todos modos, me gusta este pequeño rompecabezas y me preguntaba si a) podría hacer lo mismo yb) hacerlo completamente basado en la web.
Entonces la hoja de ruta es: