UNIVERSIDAD DEL VALLE ESCUELA DE INGENIERIA DE SISTEMAS Y COMPUTACION FUNDAMENTOS DE ANALISIS Y DISEÑO DE ALGORITMOS Miniproyecto 1 1. Introducción El presente proyecto tiene como objetivo principal enfrentar a los estudiantes del curso al diseño de la solución de un problema, utilizando estructuras datos. Además, se pretende alcanzar los siguientes objetivos específicos: • • • Realizar análisis de complejidad de las operaciones que permiten solucionar el problema Conocer los tiempos de computo que se obtienen al incorporar las estructuras de datos en la solución de problemas Implementar en un lenguaje de alto nivel las estructuras de datos y una solución funcional del problema 2. El problema1 El Sudoku se crea a partir de los trabajos del matemático suizo Leonhard Euler (1707-1783) cuando se encontraba trabajando en la demostración de un conjunto de teoremas acerca del cálculo de probabilidades. Sin embargo, el Sudoku visto como un juego, tiene su origen en Nueva York a finales de 1970. Para entonces no se llamaba Sudoku sino simplemente Number Place (El lugar de los números), siendo publicado en la revista Math Puzzles and Logic Problems de la empresa especializada en rompecabezas Dell. Posteriormente Nikoli, una empresa japonesa especializada en pasatiempos para prensa, lo exportó a Japón publicándolo en el periódico Monthly Nikolist en abril de 1984 bajo el título "Suji wa dokushin ni kagiru", que se puede traducir como "los números deben estar solos" y que posteriormente se abreviaría a Sudoku (su=número, doku=solo). Tras pequeñas variaciones en cuanto a las reglas que se deben seguir en el juego, se obtuvo el Sudoku tal como se conoce hoy y fue a partir de la prensa japonesa que se inició su salto al resto del mundo. 1 Tomado de http://sudoku.com Descripción del juego. El Sudoku se presenta como una tabla de 9×9, compuesta por subtablas de 3×3 denominadas "regiones". Al inicio del juego algunas celdas pueden contener números. El objetivo es rellenar las celdas vacías con un número en cada una de ellas, de tal forma que cada fila, columna y región contenga los números de 1 a 9 sólo una vez. En la figura 1 se muestra un ejemplo de un posible estado inicial del juego. 9 1 4 8 4 1 7 2 3 7 5 6 6 7 2 4 9 8 6 5 2 4 8 9 7 9 6 1 3 2 6 4 7 3 6 1 Figura 1 Los números que hacen parte del estado inicial no se pueden modificar. El juego inicia al seleccionar en cada jugada una posición del tablero (que no tenga números dados en la configuración inicial) e indicar el número a colocar. Se debe verificar que el número que se desea colocar no esté ni en fila ni en la columna seleccionada. Además, el número debe estar entre 1 y 9 (ambos incluidos). El juego termina cuando cada posición del tablero tiene un número y cada fila, columna y región contiene los números del 1 al 9. En la figura 2 se muestra un ejemplo de estado final del juego. 9 1 2 8 4 7 5 3 6 6 7 5 2 9 3 8 1 4 3 8 4 1 6 5 9 7 2 1 3 6 4 8 9 7 2 5 7 2 8 3 5 6 1 4 9 Figura 2 4 5 9 7 2 1 3 6 8 2 6 7 5 3 8 4 9 1 5 4 3 9 1 2 6 8 7 8 9 1 6 7 4 2 5 3 3. Consideraciones para la solución del problema La solución planteada debe tener en cuenta cada uno de los siguientes aspectos: • • • El tablero se maneja como un arreglo de 9x9. Se debe tener una interfaz gráfica que permita ver el estado actual del juego. La aplicación debe solicitar el ingreso de una configuración inicial. Para esto, la información acerca de los números y sus posiciones se debe leer de un archivo que tiene el siguiente formato: El archivo debe tener 9 líneas. Los números en cada línea se colocan uno seguido de otro y en caso de que se trate de una casilla vacía se coloca el símbolo -. Por ejemplo, el archivo para el ingreso del tablero inicial mostrado en la figura 1 es: 96--74--8 1-8-2-649 -54-----821-37-96 --------7-5-61-24 -----3-6--7-4---6-2-9-173 • • • • • • Cuando el usuario desee insertar un número n en la fila f y columna c, se debe verificar que no esté ni en la fila f ni en la columna c. En caso de estarlo, se muestra un mensaje indicando que no se hizo el ingreso del número al tablero, en caso contrario, se muestra en el tablero el número y se considera una jugada válida. Cada vez que se de una jugada válida se debe verificar si se completó el Sudoku. En tal caso se debe mostrar un mensaje. La aplicación debe tener una opción Deshacer que permita eliminar la última jugada válida. Se podrá aplicar tantas veces esta acción como jugadas válidas previas se hayan realizado. Se debe incluir la opción Rehacer que permita realizar un movimiento que se había eliminado, esto es, una jugada sobre la que se había aplicado Deshacer. La aplicación debe tener una opción Jugada sugerida dada una fila f y una columna c seleccionada por el usuario. La sugerencia puede consistir, por ejemplo, en un número que no esté ni en la fila f ni en la columna c y que no haya sido eliminado previamente de esa posición. Utilice otras estrategias adicionales que “puedan” llevar a completar una solución. La aplicación debe tener un historial de todas las jugadas realizadas. Incluidas las de Deshacer y Rehacer. Se debe incluir una opción Ver Jugadas que permita ver para cada jugada realizada la posición, el número y el tipo de acción, esto es, Deshacer, Rehacer o Nueva. 4. Entrega y sustentación Se debe realizar un análisis formal de complejidad de cada una de las operaciones desarrolladas. Asegúrese de mostrar los cálculos necesarios para obtener el tiempo computacional de las operaciones. Debe entregar este análisis en un archivo llamado Análisis.pdf Entregue el código fuente del programa. El miniproyecto se debe entregar el día jueves 2 de Noviembre. La sustentación se realizará el día miércoles 8 de Noviembre. 5. Calificación Se consideran los siguientes porcentajes: 40% Análisis y diseño -Definición de las operaciones -Incorporación de las estructuras de datos para la solución del problema -Análisis formal de complejidad 30% Implementación -Calidad de la interfaz gráfica -Facilidad de uso 30% Presentación -Sustentación (Explicación operativa de la aplicación y justificación de las estructuras seleccionadas para la solución y demás decisiones tenidas en cuenta)