Lacosox Sudoku Solver Adictive Edition

17 junio, 2008 at 13:10

En la sección inferior de un diario salía un cuadro… «Entretenidos problemas de SUDOKU»,  habían 2, uno que decía «Nivel Fácil» y «Nivel Difícil»..

Como a mi me gusta complicarme la vida evidentemente comencé con el «Nivel Difícil», al poco andar ya no podía seguir llenando casillas sin estar seguro de lo que ponía, las dudas comenzaron… y mi capacidad para resolver este tipo de problemas se estaba poniendo en duda….  asi que tomé una desición bastante simple, para evitarme terminar siendo un fracasado preferí hacer el «Nivel Fácil»… a las pocas horas me dí cuenta que era una farza, el nivel fácil no tenía nada de fácil… estaba lleno de trampas y practicamente era imposible de resolver sin usar algún tipo de torpedo…

Fue entonces cuando en un momento de descanzo recordé que tenía un computador a menos de 2 metros de donde estaba sentado,  ¡Por fin podría resolver los problemas!… pero existe un problema.. no tenía conexión a internet que me permitiera buscar algún software para resolver sudokus, no me quedaba que escribir un programa yo mismo…  ¿o aceptar la derrota?, jamás!… (detalle completo después del corte)

 

Para resolver el problema existen varias alternativas, entre ellas:

  • Utilizar fuerza bruta y verificar todas las posibildades hasta encontrar la solución.
  • Seguir un árbol de posibilidades, validando las ramas antes de ejecutarlas. Utilizando la lógica «que pasa si pongo 1 en esta casilla»
  • Utilizar una lógica más humana, utilizando la lógica «¿que número puedo poner en esta casilla?»

La primera alternativa es muy flaite. La tercera alternativa resulta ser una solución más elegante, pero implica algunas horas extra de programación. Apliquemos la segunda alternativa y veamos los tiempos de reacción….

Seguir una lógica de un árbol de posibilidades es bastante simple de implementar, la idea es verificar todos los posibles caminos, que tenemos y cuando encontremos un problema, volveremos al paso donde realizamos la última decisión, con el fin único de tomar otro camino. Tal cual se hace cuando se resuelve un laberinto.

Luego de implementada la lógica era la hora de testear el problema que el diario me planteaba.

sc1

Problema resulto en tan solo 58 milisegundos, es por eso que amo estas máquinas 😀 . El total de iteraciones equivale a la cantidad conbinaciones que intentó antes de encontrar la solución, algo así como 307 posibilidades de caminos erroneos y 1 camino correcto para completar el laberinto.

El programa se detiene al encontrar la primera solución, por lo tanto no se está seguro si en realidad existan más soluciones para el mismo problema. Aunque por lo general con una solución basta.

El programa está escrito en lenguaje Java, y debe ejecutarse en modo texto indicando como parámetro el problema a resolver, simplemete indique las casillas de izquierda a derecha y de arriba hacia abajo, indicado un 0 para las casillas en blanco.

Queda el código fuente disponible para todos quienes quieran estudiarlo, modificarlo, perfeccionarlo y hacerse millonarios con él.

Solo se recomienda que no se utilce mucho, se han notificado casos en que usuarios se vuelven «adictos» a resolver Sudokus con esta herramienta, probablemente al ver que los resultados los entrega tan rápidamente.

ACTUALIZACIÓN: Ahora puedes revisar el código fuente en GitHub o, si aún lo quieres, bajarlo directamente.

LacosoxSudokuSolverAdictiveEdition.tar
Título: LacosoxSudokuSolverAdictiveEdition.tar (0 click)
Leyenda:
Filename: lacosoxsudokusolveradictiveedition-tar.gz
Size: 10 KB

 

CiberBingo y Tómbola

17 junio, 2008 at 06:56

CiberBingo y Tómbola

2 Visiones distintas del mismo problema

El problema nació en el verano del 2008, mientras la familia se reunía para jugar un entretenido juego de bingo surge la idea (inicialmente mía creo) de realizar un programa de computadora que realizara la misma función que el sorteo en forma manual. Mientras jugábamos se extraviaron algunos números en la tómbola los cuales no pudieron entrar en el próximo sorteo y fueron reemplazados por unos momentaneos de papel, obviamente los cuales no produjeron el mismo efecto de ahí la necesidad de digitalizar el problema.

Inicialmente la idea era sencilla, desarrollar un programa que simulara el proceso. Cantidad de programadores disponibles 2 con lo cual un pensamiento lógico llevaría a dividir las tareas para el desarrollo, sin embargo luego de varias conversaciones sin llegar a un acuerdo cada programador decide actuar por su lado y comienza a crearse un especie de competencia por quién desarrolla primero el programa y de mejor forma.

A continuación una descripción formal del problema, resultado obtenido y una pequeña comparación entre las aplicaciones , decida usted cuál es la mejor.

Objetivo: Crear aplicación en Java que implemente el juego típico de Bingo, emulando una tómbola, bolas, un medio para saber la bola sorteada, el cartón del jugador y todos los elementos típicos de un Bingo.

Especificaciones: El sorteo de las bolas debe ser totalmente aleatorio.

 

Comparación Básica entre las aplicaciones

CiberBingo Tómbola
Librerias gráficas utilizada Swing Swing
Visor de última bola Si Si
Orientación a objetos Si Si
Nivel de Oreintación a objetos (si aplica) 3 Clases 6 C lases
Funcionalidades Disponibles Sortear

Nuevo Juego

Guardar Partida

Recuperar Partida

Sortear Automáticamente

Cantador Virtual (Idea Original)

Sortear

Sortear automaticamente

Predicción de ganador

Mostrar/Ocultar Log

Mostrar última bola sorteada

Mostrar panel bolitas

Cantador Virtual

Configurar Colores

Función de aleatoridad Math.random()*76; Math.random()*100;
Orden de código Buena Regular
Simplicidad de código Regular Buena
Cantidad de formularios utilizados 2 3
IDE Utilizado NetBeans 6 NetBeans 5.0
Licencia GPL GPL

 

Ventajas comparativas según cada programador

Tómbola (GPL)
“La principal ventaja de tómbola es la buena interacción con el usuario y capacidad de configurar casi todo. Además el diseño es fácilmente adaptable a ser utilizado por otra aplicación.”

CiberBingo(?)
“ …………………………….”

Resultado final (decida usted)

ciberBingo

tombola

Actualización: Entre uno de los tantos movimientos que ha tenido este sitio, hemos perdido el codigo fuente de ciberbingo 1.0 ; Prometemos volver a ponerlo aquí si es que algún nos topamos con algún backup del mismo.

 

Proyecto_Tombola
Título: Proyecto_Tombola (0 click)
Leyenda:
Filename: proyecto_tombola.zip
Size: 3 MB

Memoricen, juegen y aburranse

10 junio, 2008 at 04:41

Lacosox presenta el último gran avance de la tecnología. si, por que nuestro deber es mantenernos al día soxeando lo más que podamos, para que de esta forma la gente que no tenga vida pueda pueda perderla jugando, y personalizando nada más y nada menos que el famoso memorice.
memorice1

No comenten que está feo, ya lo hemos notado. Queda totalmente disponible el programa ejecutable del juego y su código fuente correspondiente, esperamos que pueda ser de utilidad a algún estudiante principiante de la tecnología java. Está demás mencionar que para poder jugarlo necesitan tener instalada la máquina virtual de java ( la pueden descargar de http://www.java.com)

 

Actualización: el código fuente no tenía todas las imágenes necesarias para una correcta ejecución, ahora se las hemos agregado, en todo caso se podían obtener desde el otro archivo a descargar.

memorice.tar
Título: memorice.tar (0 click)
Leyenda:
Filename: memorice-tar.gz
Size: 84 KB
memorice_src_img_fix.tar
Título: memorice_src_img_fix.tar (0 click)
Leyenda:
Filename: memorice_src_img_fix-tar.gz
Size: 118 KB