Por @Alvy — 28 de Julio de 2024

Un solucionador y generador de sudokus para aprender cómo funcionan los algoritmos relacionados

La parte más conocida de este proyecto relacionado con los Sudokus se llama Super Sudoku, y lo creó Tom Nick para su abuela, que se quejaba de la escasa dificultad de los que encontraba en las revistas. Esto le llevó a una aventurilla más interesante, que cuenta en una larga anotación: Cómo generar sudokus por pura diversión.

Es una gran explicación paso a paso de cómo se resuelven sudokus, y también cómo se generan, y los algoritmos relacionados. Y además el código es libre y está en Github. Así que puedes descargarlo, examinarlo, modificarlo, mejorarlo y usarlo como te plazca.

En el artículo avanza paso a paso del mismo modo que haría cualquier programador humano: probando primero por fuerza bruta, luego buscando una pequeña optimización (como es dejar de usar la fuerza bruta en cuanto se detecta que el sudoku es imposible) y luego imitando cómo resuelven los sudokus los humanos, en este caso intentando resolver primero las regiones que tienen menos opciones.

De aquí se llega al algoritmo AC-3 que está relacionado con la consistencia y las restricciones a la hora de resolver un problema. Lo cual va mucho más allá de los meros pasatiempos de numeritos o letras y colores. En los sudokus más avanzados, por ejemplo, puede suceder que haya varias restricciones; usar algoritmos como el AC-3 permite dar con la solución más fácilmente.

Finalmente hay una parte dedicada a la generación de sudokus, pero ahí la complicación es más intrigante todavía: cómo percibimos los humanos la dificultad de un problema lógico.

Una propuesta es rellenar el sudoku aleatoriamente y entonces borrar números comprobando que se puede resolver; se supone que cuantas menos pistas haya más difícil será. Aquí el artículo flojea un poco porque no concreta lo que considera un «sudoku válido», que según los expertos puede tener que ver con una solución única, la simetría que dibujan las pistas y otros detalles. Aun así resulta una lectura muy interesante tanto para aficionados como para programadores.

Relacionado:

Compartir en Flipboard Publicar / Tuitear