Sudoku en Excel. Para distraerse un rato con este conocido juego.

Hace unos días me propuse crear un programa VBA-Excel para realizar Sudokus. Si he de ser sincera, yo no he hecho muchos Sudokus en mi vida. Probé a hacer algunos hace tiempo y en principio, no me pareció algo muy complicado. Entretenidos, sí. Son interesantes, hay que aplicar la lógica. El caso es que muy aficionada no soy, la verdad, aunque sí conozco las reglas. Recuerdo una época en la que todo el mundo hacía Sudokus y hay gente muy aficionada. Si bien estas cosas suelen tener temporadas en las que están más de moda.

Pues como decía, me puse a intentar hacer un algoritmo para generar Sudokus…A plantearme cómo se hacen los Sudokus. La primera línea es fácil, nueve números del uno al nueve, colocados al azar. En la segunda línea las cosas se complican algo, pues al colocar los números, no pueden coincidir con el de igual posición en la primera fila, ni con los que corresponden a la caja de 3×3 que se formará. En la tercera fila…a medida que avanzamos en la creación del Sudoku, las cosas se complican. Es fácil llegar a un punto en el que no es posible avanzar y entonces hay que deshacer una parte, volviendo hacia atrás y probando nuevos números.

Llegué a la conclusión de que hacer un Sudoku válido es mucho más complicado que resolver uno. Al menos esa impresión me llevé.

Me puse a buscar en la red, y efectivamente, así parece confirmarlo la documentación que encontré.

Si quieres leer sobre el tema puedes mirar  por ejemplo, >aquí<  que lo explica muy bien (parecía sencillo…¿verdad?…)

Entonces, existen algoritmos que crean Sudokus, pero son bastante complejos y consumen demasiado tiempo. Por lo visto la mayor parte de los programas que encontramos lo que hacen es tener una especie de base de datos de Sudokus y éstos, girados, tomados de distintas formas y cambiando la dificultad, generan una gran variedad de puzzles diferentes, qué, a no ser que tengas una memoria extraordinaria, te crean la sensación de ser prácticamente infinitos.

Como curiosidad, la suma de los elementos de cada una de las filas, de cada una de las columnas y de cada uno de los subpaneles, es siempre 45. Pues la suma de los números del 1 al 9 se calcula como: 9*(1+9)/2.

Bueno, pues para descargar mi juego en Excel de Sudokus y jugar, -> pulsa aquí, por favor <- Está hecho sobre la versión 2007, aunque es de esperar que funcione en versiones posteriores. Has de seguir las instrucciones del inicio y habilitar las macros para que funcione.

sudoku

¡Qué te diviertas! 🙂

Anuncios

3 thoughts on “Sudoku en Excel. Para distraerse un rato con este conocido juego.

  1. Muy bueno el Sudoku… me paso lo mismo estaba intentando encontrar un algoritmo para crearlos en excel ( uno para resolverlo es facil incluso cree un programa en excel que no solo lo resuelve sino que tiene opcion de “apoyo ” en donde al rededor de cada celda tiene los numeros del 1 al 9 y uno puede eliminarlos de la celda el cuadrante la fila o la columna con solo con un click) pero volviendo al tema, al final no encontre un algoritmo pues cierto el primer cuadrante el central y el ultimo al ser independientes es facil pero luego para cada celda habia que crear un procedimiento basado en la informacion de cada celda ya rellenada eliminandolos de las posibles 9 soluciones y luego escogiendo un resultado aleatorio de los valores restantes y aunque posible me estaba creando un codigo demasiado extenso. opte por algo sensillo y no tan elegante y fue que al ser el sudoku una matrix 9×9 responde a la mismas caracteristicas de las matrices ordinarias. entonces utilice las propiedades de una matrix semejante (o idenditad) asi que si uno permuta las filas del 1 al 3 o las del 4 al 6 o 7 al 9 lo mismos que las columnas del 1 al 3 del 4 al 6 y del 7 al 9 se puden optener casi un numero infinito de sudokus tambien se puede permutar los numeros del 1 al 9 asi se puede reemplazar el 1 por un 3 y el tres por el 1 el 5 por el 9 y el 9 por el 5 y asi sucesivamente, y todo utilizando como base un sudoku ya rellenado , como le digo no es elegante pero si es funcional y ademas es casi imposible determinar el sudoku original y ademas agregeque un plus y es que un sudoku se puede crear escogiendo un valor aleatorio en la primera casilla y luego sumandole un 1 en la siguente casilla pero cuando es 9 entonces el siguente valor sera un 1 (la ecuacion para este procedimiento esta dado b=a+1 si a+19, si (a+1=9 entonces a-8) en otras palabras se suma 1 y si es 9 se resta 8 (1,8) y tambien puede aumentar de dos en dos bajo la condicion (2,7) y como ven es la tabla del nueve: para 1 =(1,2) , para el 2 (2,7) para el 5 (4,5) etc asi que el sudoku identidad puede variar aletaoriamente con esta caracteristica (hay ecepcion en el 3 y el 6 pero se pueden omitir estos valores con una condicon si, esto hace un poco mas elegante al sudoku incluso hace que si alguien quiere pasarse de listo y encontrar una ecuacion utilizando matrices pues le resulte dificil.

    • Jerry, muchísimas gracias por tu comentario. Me encantó.
      Hace mucho que hice el programa y con toda seguridad, hoy día lo resolvería de otra manera, pero el procedimiento que usé es parecido al que comentas (aunque yo los conceptos del álgebra matricial no los tenía tan frescos y fui algo más, digamos…”artesanal” jeje). Como muy bien dices, el código es menos elegante, pero mucho más práctico y eficaz. Al final al usuario lo que le importa es que funcione.
      En mi caso recuerdo que también tenía una matriz a modo de máscara, que se genera de forma aleatoria y que determina los números que se tienen que mostrar y los que no. La cantidad de números que se muestran depende de la dificultad elegida (hasta un mínimo, pues si no, no se podría resolver). Todo esto combinado (la aleatoriedad dentro de la matriz, como comentas, y la aleatoriedad de los números que se muestran) crean, efectivamente, la ilusión de infinitos sudokus 🙂
      Por último tengo que reconocer, que no soy nada aficionada a los sudokus, lo hice simplemente como ejemplo de programación, sin más.
      Un saludo

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s