Transformar a un príncipe en una rana no es nada extraordinario y se consigue con relativa facilidad. Cualquier malhumorado jefe de sección lo lleva a cabo a diario. Pero transformar a una rana en un príncipe, eso exige en alto grado arte o magia, o amor.
La semana pasada hablé de los secretos insospechados de los sudokus, ese nuevo acertijo que ha invadido prácticamente todos los periódicos del país. A partir de ahí, me entró un poco la obsesión de hacer mi propio programa que creara y resolviera este tipo de pasatiempos de lógica.
Así entonces, puse manos a la obra y descubrí en Internet una decena de artículos verdaderamente interesantes al respecto. En uno de ellos comentaba, que era difícil entender los algoritmos de generación de este pasatiempo, porque como con estos programas se crean los sudokus para los medios impresos, y eso representa algún tipo de beneficio económico a sus creadores, no estaban muy bien dispuestos a explicarle a los demás cómo es que hacían las cosas.
La razón suena lógica. De hecho, los algoritmos que usan los mejores programas de ajedrez no se conocen públicamente. Sí, se sabe cómo trabajan en lo general, qué hacen las funciones de evaluación, qué conceptos se toman en cuenta, etcétera, pero a ciencia cierta no se tiene la receta de cocina, pues efectivamente, gracias a mantener esto en “secreto”, los programadores de ajedrez pueden vivir de ello.
En la Universidad Iberoamericana, en el curso de Proyectos Computacionales II, he tenido estupendos estudiantes. Uno de ellos es José Luis Calderón. Debido a que es muy dedicado y aplicado, le dejé de proyecto final que escribiera un programa para crear los dichosos sudokus.
Cabe señalar que desde el artículo pasado, tuvimos en clase, con algunos alumnos avanzados, una larga discusión sobre la manera de crear este tipo de acertijos. En primera instancia, me parecía que era muy simple, bastaba con generar permutaciones de nueve objetos. Sin embargo, encontré que si genero una primera fila de 9 números diferentes, ya la segunda fila no es una mera permutación más, sino que además, debe cumplir con que no se repitan los números en la fila de abajo.
Por ejemplo, si la primera fila es 1 2 3 4 5 6 7 8 9 entonces la segunda fila no puede ser esta permutación: 1 2 3 4 5 6 7 9 8 pues la primera columna (para empezar) se repite el 1.
De esta manera, la conclusión es que no es un simple problema de permutaciones.
Calderón entonces empezó su proyecto buscando información sobre sudokus en Delphi. Después de mucho batallar encontró un código de un alemán, que decidió “destripar” hasta entenderlo. Entonces rescribió las partes fundamentales de nuevo y en unas 15 horas de trabajo llegó a un modelito que trabaja muy bien.
El programa de Calderón permite no sólo crear sudokus, incluso con diferente grado de dificultad, sino que, además, puede solucionarlos. Una interesante opción extra es que puede resolver los sudokus que se publican en los diferentes medios.
Ahora habré de estudiar un poco el código para ver cómo diablos se generan estos acertijos. Una vez resuelto este asunto, la verdad es que mi obsesión ha bajado un poco de nivel.
De nada, me gusta incluir el origen de la información... ¿Eres de México? La verdad no me fije. Yo soy malagueña pero viví en México por más de un año, en Atizapan de Zaragoza. Saludos a tu linda tierra.
Hola Engadi, ¿te refieres al artículo? Lo escribió López Michelone en la Revista Proceso. Yo soy de México, como tú dices, de esta linda tierra, pero la tuya tampoco se queda atrás en belleza. Recibe un saludo desde estas cálidas tierras.