




Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Resolución de sudoku utilizando backtracking y python
Tipo: Guías, Proyectos, Investigaciones
1 / 8
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





TECNICATURA EN PROGRAMACIÓN
Integrantes: Rivero Ayelén Echavarría Lucas Saucedo Alexis Vivan Laura Varela Alejandro Sosa Jaqueline Profesores: Lic. Adrián N. Rodriguez Lic. Diego A. Ambrossio
Abstract The present work consists of using artificial intelligence to solve a sudoku. For this, the rules and conditions to solve it will be analyzed, as well as the strategy used to raise the code, as a result we can solve sudokus 3x3. Resumen El presente trabajo consiste en utilizar inteligencia artificial para resolver un sudoku. Para ello, se analizarán las reglas y condiciones para resolverlo, así también como la estrategia utilizada para plantear el código, cómo resultado podremos resolver sudokus 3x3. Historia del Sudoku Introducción Se cree que el juego que hoy conocemos como sudoku surgió de los trabajos del matemático Leonhard Euler (1707 – 1783) sobre el cálculo de probabilidades de los cuadrados latinos. Los sudokus empiezan a ser conocidos en las publicaciones de las revistas "Math Puzzles and Logic Problems" y “Dell Magazine” de Nueva York, bajo el nombre de “Number Place” y como entretenimiento. En 1984 el juego se exporta a Japón y se publica en el diario “Monthly Nikolist”. Se hace conocido con el nombre Sūji wa dokushin ni kagiru, "los números deben ser únicos" y como es costumbre de ese país, es abreviado a Sūdoku (sū = número, doku = solo). En 1986, el presidente de la revista introduce dos innovaciones en el rompecabezas: el número de cifras dadas estaría restringida a un máximo de 30 y estas deberían ser “simétricas” al rotarse, condición que ya no se cumple en los Sudokus actuales. En 1997 Wayne Gould, un juez neozelandés, durante unas vacaciones en Japón, encontró una revista de Sudoku y habiendo estudiado programación, escribió un programa para generar sudokus al azar. Vuelve a introducirlos en occidente ofreciéndoles al diario británico “The Times” a cambio de que se publicite su sitio web. Estos comienzan a ser publicados a partir de finales del 2004. Este juego se ha ido extendiendo por periódicos y publicaciones por todo el mundo convirtiéndose en un fenómeno global, tanto que todos los años se lleva a cabo el Campeonato Mundial de Sudoku. ¿Cómo se resuelve? El sudoku es un juego de lógica matemática en el que se debe completar una cuadrícula de 9x9 celdas dividida en 9 regiones de 3x3, con números del 1 al 9, de forma que cada número aparezca solo una vez en cada fila, en cada columna y en cada región. La estrategia para resolver sudokus se puede considerar como la combinación de tres procesos, rastreo, marcado y análisis en las diferentes etapas de la resolución. A partir de uno de los dígitos dados se puede rastrear dónde están ubicados los dígitos semejantes en las otras 8 subcuadrículas para ir completando los faltantes, siguiendo las condiciones del juego. Una vez agotado esté método y sin poder completar más celdas, se debe hacer un análisis de las posibilidades que existen para completar las celdas faltantes; esto se puede realizar aplicando una marca en las casillas o el número como subíndice y es lo que se conoce como
Análisis La solución cumple con todas las reglas del juego, las cuales son: En una cuadrícula de 9x9: 1 - Los espacios en blanco se rellenan con números del 1 al 9. 2 - El número no debe repetirse en la subcuadrícula de 3x3. 3 - El número no debe repetirse en la fila. 4 - El número no debe repetirse en la columna. 5 Si solo hay un valor posible para una casilla de determinada columna, fila o subcuadrado ese valor ocupará esa casilla. Por lo tanto, el algoritmo a utilizar debe constatar estas condiciones con cada número. Por ejemplo, en la primera casilla de nuestro sudoku ejemplo resuelto, vemos que el primer número es nueve, el cual no se encontraba en la cuadrícula correspondiente, no se encontraba en la fila y tampoco en la columna. Esta operación se debe realizar para cada casilla. Sin embargo, las condiciones no son suficientes para la resolución del problema. También vamos a necesitar pasar por cada casilla y verificar: 6 - Si NO hay un número entre el 1 y el 9 En caso de ser cierto se pondrá el número 1, si este verifica los pasos 2,3 y 4 pasará a la próxima casilla, caso contrario pondrá el número dos y así hasta encontrar un número válido. Hasta el momento, tenemos 6 enunciados que nos ayudan a poner un número en una casilla, pero ¿Cómo llegamos a la solución del problema?. Aquí es donde aplicamos el algoritmo de backtracking, En general, la forma de actuar consiste en elegir una alternativa del conjunto de opciones en cada etapa del proceso de resolución, y si esta elección no funciona (no nos lleva a ninguna solución), la búsqueda vuelve al punto donde se realizó esa elección, e intenta con otro valor. Cuando se han agotado todos los posibles valores en ese punto, la búsqueda vuelve a la anterior fase en la que se hizo otra elección entre valores. Si no hay más puntos de elección, la búsqueda finaliza.
Esta imagen es un ejemplo del backtracking, podemos ver que tiene la apariencia de un árbol de búsqueda (no necesariamente binario). Esto aplicado en el sudoku hallará la solución única para este sudoku. Modelado del problema a partir del análisis Partiendo de las reglas mencionadas y el algoritmo backtracking podemos deducir que: 1 - El programa debe recorrer cada casillero del sudoku 1 a 1. 2 - Debe saber si el casillero tiene un número entre 1 y 9. 3 - Debe poner un número y revisar si es válido(no se repite en la columna, cuadrícula o fila) 4 - Debe repetir el proceso, pero guardar las posiciones que vaya utilizando 5 - En caso de no poder poner ningún número válido, debe volver un paso atrás, setear ese casillero en 0 y debe poner el número siguiente que verifique la validez. Este proceso se repetirá hasta que el sudoku sea resuelto. Implementación del código Para realizar el algoritmo se utilizará python 3, más precisamente 3.9 pero debería funcionar en versiones anteriores. Colab de código
determinar_sudoku(sudoku) revisar_filas_columnas(2,0,8,sudoku)
Bibliografía de consulta Peleato Pradel, J. J. (s. f.). 2.4 Backtracking - Programación, refactoriza tu mente. Introducción - Programación, refactoriza tu mente. https://docs.jjpeleato.com/algoritmia/backtracking https://estructuradedatos2backtracking.blogspot.com/2014/08/metodo-backtracking-u- algoritmo-vuelta.html https://recursospython.com/codigos-de-fuente/solucionador-de-sudoku/ https://github.com/jorditorresBCN/Sudoku https://github.com/Kyubyong/sudoku https://www.youtube.com/watch?v=KWP90gAsOa https://www.euskadi.eus/contenidos/informacion/ocio_cult_sudoku/es_11031/ sudoku.html#:~:text=Origen,el%20lugar%20de%20los%20n%C3%BAmeros). https://sudoku.com/es/como-jugar/la-historia-de-sudoku/ https://www.sudokumania.com.ar/noticias/origen-del-sudoku