Actividad 7: Los sudokus Parte 2
En la actividad previa teníamos una sola clase que se encargaba de crear, validar y mostrar el sudoku. Sin embargo, de acuerdo a los principios SOLID, es mejor dividir la funcionalidad en varias clases.
En esta actividad, se te pide que dividas la funcionalidad de la clase Sudoku en varias clases, cada una con una responsabilidad específica.
Clases a crear
SudokuGenerator: Esta clase se encargará de generar un sudoku válido. Debe tener un método
generate
que devuelva una matriz de enteros representando el sudoku generado.SudokuValidator: Esta clase se encargará de validar un sudoku. Debe tener un método
isValid
que tome una matriz de enteros y devuelva un booleano indicando si el sudoku es válido o no, para un valor concreto en una celda.SudokuPuzzle: Esta clase se encargará de representar un sudoku como un rompecabezas. Debe tener un método
getPuzzle
que devuelva una matriz de enteros representando el sudoku. Además, debe tener un métodoprintSudoku
que imprima el sudoku en la consola, utilizando caracteres ASCII para representar las celdas y contornos de la matriz.
"SudokuGenerator"
Esta clase deberá de contener el siguiente atributo:
sudoku
: una matriz de enteros que representa el sudoku generado.
Así mismo, las siguientes funciones:
generateSudoku
que generará un sudoku válido y lo almacenará en el atributosudoku
.clearBoard
que limpiará el tablero de sudoku.shuffledNumbers
que generará una lista de números del 1 al 9 en un orden aleatorio.fillBoard(int row, int column)
que llenará el tablero de sudoku con números aleatorios.
"SudokuValidator"
Esta clase deberá de contener el siguiente atributo:
sudoku
: una matriz de enteros que representa el sudoku a validar.
Así mismo, las siguientes funciones:
isValid(int row, int column, int number)
que validará si el número es válido en la celda (row, column).isRowValid(int row, int number)
que validará si el número es válido en la fila (row).isColumnValid(int column, int number)
que validará si el número es válido en la columna (column).isBoxValid(int row, int column, int number)
que validará si el número es válido en el cuadrante (box), en el que se encuentra la celda (row, column).
"SudokuPuzzle"
Esta clase deberá de contener el siguiente atributo:
sudoku
: una matriz de enteros que representa el sudoku a mostrar.
Así mismo, los siguientes constructores:
SudokuPuzzle()
: constructor que crear uná un sudoku válido y completo mediante el uso de las clasesSudokuGenerator
ySudokuValidator
.SudokuPuzzle(int visibleCells)
: constructor que recibe el número de celdas visibles y crea un sudoku válido y completo, pero con el número de celdas visibles especificado. El resto de las celdas deben de estar vacías.
Por último, la clase debe de tener las siguientes funciones:
printSudoku()
: que imprimirá el sudoku en la consola, utilizando caracteres ASCII para representar las celdas y contornos de la matriz.getSudoku()
: que devolverá la matriz de enteros que representa el sudoku.applyDifficulty(int visibleCells)
: que aplicará la dificultad al sudoku, eliminando el número de celdas visibles especificado.
Requisitos
El sudoku debe de ser un rompecabezas de 9x9.
El sudoku debe de ser un sudoku válido y completo.
El sudoku puede ser mostrado en consola o JOptionPane, dependiendo de tu preferencia, pero utilizando caracteres ASCII para representar las celdas y contornos de la matriz.
Entregables
Código fuente del sistema.
Pruebas funcionales que demuestren el correcto funcionamiento de cada una de las funcionalidades.
Portada con datos de identificación del equipo de trabajo.
Criterios de Evaluación
Criterio | Descripción | Puntuación |
---|---|---|
Portada | Presentación y datos de identificación del equipo de trabajo. | 10% |
Código | Calidad del código, modularidad y uso de buenas prácticas. | 20% |
Pruebas | Cobertura de pruebas funcionales y casos de prueba. | 30% |
Modularidad | Separación de clases y responsabilidades. | 20% |
Impresión | Presentación del sudoku en consola o JOptionPane. | 20% |
Total | Total de puntos posibles. | 100% |
Notas
El sistema debe ser entregado en un archivo comprimido (zip) que contenga el código fuente y las pruebas.
La fecha de entrega es el 21 de mayo de 2025 a las 23:59 horas.