Miniproyecto 1 - Escuela de Ingeniería de Sistemas y Computación

Anuncio
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)
Descargar