14 septiembre 2005

Sudoku


Interesante juego de ingenio el que empezó a publicar Clarín hace dos semanas. Para el que no lo vio o no sabe de que se trata les cuento:

- 1 cuadrado de 9 x 9 (o sea dividido en 81 cuadraditos)

- Se forman dentro de este cuadrado 9 cuadrados menores de 3 x 3

Objetivo del juego: ubicar los números de 1 a 9 en las filas, las columnas y los cuadrados internos sin que se repita ningún número en una misma fila, una misma columna o un mismo cuadrado de 3 x 3. La ayuda que te dan son algunos números ya puestos como para que te guies

No parece difícil, pero tampoco es fácil. Es un juego de ingenio bastante interesante y ya le descubrí una técnica bastante buena para ir resolviéndolos sin tener que andar probando y borrando.

Me preguntaba como se generan los Sudokus, deben tener un programa que los arma, ya que existe un número finito de combinaciones que cumplen con las reglas de filas, columnas y cuadrados. También me puse a pensar como sería un programa que los resolviera y no se me ocurrió otra cosa que un programa de “fuerza bruta” que empiece a realizar todas las combinaciones y chequee cuando se cumplen todas las reglas, lo único que habría que ingresarle son los números que vienen de ayuda y en que posiciones aparecen dichos números.

Como todavía no tengo una Deep Blue para que me haga los cálculos (9 elevado a la 81) los voy a seguir resolviendo a ojo y aplicando criterios “humanos”

3 Comments:

At 10:44 p. m., Anonymous Anónimo said...

Te odio Leo, ahora vas a hacer q me rajen del laburo xq me voy a pasar todo el dia quemandome la cabeza pensando como hacer un programa eficiente q lo saque...

 
At 4:54 p. m., Anonymous Anónimo said...

los hermanos sean unidos!!!!

 
At 10:39 p. m., Anonymous Anónimo said...

Tantos años después no creo que nadie lea este comentario, pero puedo decir que NO, realmente no se puede hacer un programa eficiente que lo haga. Pero sí se puede hacer relativamente fácil (habría que pensarlo, pero supongo que no debe ser TAN complicado) en algún lenguaje del paradigma lógico, como prolog por ejemplo.
En este paradigma se da una "base de conocimiento" y se definen reglas que dan verdadero/falso. Planteando las reglas correctamente, el motor de backtracking (el que resuelve las consultas) se encarga de encontrar la(s) combinaciones correctas.

 

Publicar un comentario

<< Home