Ayudando a cumplir sueños
Solo espero que se cumpla el record o este certificado no valdrá de nada …
Lacosox Sudoku Solver Adictive Edition
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.
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.
Descomposición L/U de una Matriz en Python (Programa anexo)
Descomposición L/U de una Matriz en Python (Programa anexo)Por: KnX.
«Esto es sin duda cierto, es absolutamente paradójico, no podemos comprenderlo y no sabemos lo que significa, pero lo hemos demostrado y, por lo tanto, sabemos que debe ser verdad.» Charles Sanders Peirce
Aparentemente las matemáticas son así, aveces nos es difícil comprenderlas y aunque han estado a nuestro lado toda la vida las ignoramos. Ya ha pasado un tiempo desde que me he alejado parcialmente (no puedes evitarlo, siempre están allí) del mundo matemático para dedicarme en su gran mayoría concretamente a la informática, sin embargo, los 3 años que estube dedicado a ella logre adquirir una visión yo diría privilegiada de como se ve la matemática desde un punto de vista matemático y menos calculista. Digo menos calculista porque como muchos se estarán de acuerdo conmigo las matemáticas más que un grupo de números es una forma de pensar.
No es mi intención hacer un ensayo de las matemáticas ni mucho menos, concentremonos ahora en el tema en si de este post.
Buscando en mis ficheros no etiquetados me he encontrado con este programa que desarrolle hace un tiempo atrás , se trata de un programa que escribí en Python para descomponer una matriz de números en sus factores LU. ¿Qué?, bueno voy tratar de explicarlo en breves palabras quizá a alguien le es de utilidad.
Supongamos una matriz pero que sea cuadrada, vale decir el mismo numero de filas y de columnas escribamos esta matriz como producto de dos matrices las que llamaremos L y U respectivamente (ya explicaré más abajo porque se eligió estos nombres) entonces:…………………………………
(Bajar PDF para seguir leyendo)
abajo dejo el programa y el pdf con su source.
CiberBingo y Tómbola
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)
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.
Memoricen, juegen y aburranse
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.
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.