- Por Emmanuel Valverde
- ·
- Publicado 28-feb-2024 0:00:00
Morning routine
Como soy una persona olvidadiza, necesito un método que me ayude a recordar mi rutina matutina. Por eso he creado un programa que, según la hora del..
Sudoku es un rompecabezas de números muy popular.
El objetivo es rellenar una cuadrícula de 9 × 9 con números de modo que cada columna, cada fila y cada una de las nueve regiones de 3 × 3 que componen la cuadrícula contengan todos los dígitos del 1 al 9.
El punto de partida es una cuadrícula parcialmente completada:
La cuadrícula terminada se vería así:
Los siguientes son ejemplos de infracciones:
Ninguna de esta opciones puede estar presente en una solución válida.
Esta kata se divide en 4 niveles de dificultad creciente. Empieza por el primero y luego avanza al siguiente.
Nota: Este nivel está pensado para que te familiarices con las reglas del juego. Si ya las conoces bien (por ejemplo, si practicas Sudoku en la vida real), puedes saltártelo y pasar directamente al Nivel 1.
Crear una aplicación capaz de determinar si una matriz es una solución potencial para un Sudoku.
El input es la ruta, un archivo CSV que contiene N filas y N números por fila, donde N es el cuadrado de un número entero mayor que 1:
Ejemplo:
1,2,3,4,
2,1,4,3,
3,4,1,2,
4,3,2,1,
N = 4
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
N = 9
El contenido del archivo forma una matriz que debes comprobar para detectar si hay infracciones de las normas.
Ejemplo:
Un archivo que contiene:
1,2,3,4,
2,1,4,3,
3,4,1,2,
4,3,2,1,
El output debería ser:
El input no cumple las reglas de Sudoku.
Un archivo que contiene
1,2,3,4,
3,4,1,2,
2,3,4,1,
4,1,2,3,
El output debería ser:
El input cumple con las reglas de Sudoku.
Crea una aplicación capaz de determinar si una solución planteada es válida para una determinada cuadrícula inicial.
El input es la ruta a dos archivos CSV que contienen N filas y N números por fila, donde N es el cuadrado de un número entero mayor que 3 (4, 9, 16, 25,...).
Ejemplo:
5,3, , ,7, , , , ,
6, , ,1,9,5, , , ,
,9,8, , , , ,6, ,
8, , , ,6, , , ,3,
4, , ,8,7,3, , ,1,
7, , , ,2, , , ,6,
,6, , , , ,2,8, ,
, , ,4,1,9, , ,5,
,1, , ,8, , ,7,9,
A continuación se presentan algunos ejemplos de soluciones incorrectas (contenido del segundo archivo de entrada):
5,3, , ,7, , , , , 6, , ,1,9,5, , , , ,9,8, , , , ,6, , 8, , , ,6, , , ,3, 4, , ,8,7,3, , ,1, 7, , , ,2, , , ,6, ,6, , , , ,2,8, , , , ,4,1,9, , ,5, ,1, , ,8, , ,7,9, |
5,3,4,5,7,8,9,1,2, |
4,5,3,8,2,6,1,9,7, 8,9,2,5,7,1,6,3,4, 1,6,7,4,9,3,5,2,8, 7,1,4,9,5,2,8,6,3, 5,8,6,1,3,7,2,4,9, 3,2,9,6,8,4,7,5,1, 9,3,5,2,1,8,4,7,6, 6,7,1,3,4,5,9,8,2, 2,4,8,7,6,9,3,1,5, |
En cualquiera de estos casos el output debería ser:
La solución planteada es incorrecta.
Este es un ejemplo de una solución correcta:
5,3,4,6,7,8,9,1,2,
6,7,2,1,9,5,3,4,8,
1,9,8,3,4,2,5,6,7,
8,5,9,7,6,1,4,2,3,
4,2,6,8,5,3,7,9,1,
7,1,3,9,2,4,8,5,6,
9,6,1,5,3,7,2,8,4,
2,8,7,4,1,9,6,3,5,
3,4,5,2,8,6,1,7,9,
En este caso, el output debería ser:
La solución planteada es correcta
Sugerencias:
Crea una aplicación que proporcione una solución válida dada la cuadrícula inicial o un mensaje en caso de que el Sudoku no tenga solución.
El input es un fichero CSV con el mismo formato que en el primer nivel y el output es una cadena CSV que contiene la solución en caso de que exista.
Ejemplo:
Para un input como el siguiente:
5,3, , ,7, , , , ,
6, , ,1,9,5, , , ,
,9,8, , , , ,6, ,
8, , , ,6, , , ,3,
4, , ,8, ,3, , ,1,
7, , , ,2, , , ,6,
,6, , , , ,2,8, ,
, , ,4,1,9, , ,5,
, , , ,8, , ,7,9,
El output debería ser:
5,3,4,6,7,8,9,1,2,
6,7,2,1,9,5,3,4,8,
1,9,8,3,4,2,5,6,7,
8,5,9,7,6,1,4,2,3,
4,2,6,8,5,3,7,9,1,
7,1,3,9,2,4,8,5,6,
9,6,1,5,3,7,2,8,4,
2,8,7,4,1,9,6,3,5,
3,4,5,2,8,6,1,7,9,
Para un input como el siguiente:
5,3, , ,7, , , , ,
6, , ,1,9,5, , , ,
,9,8, , , , ,6, ,
8, , , ,6, , , ,3,
4, , ,8, ,3, , ,1,
7, , , ,2, , , ,6,
6, , , , , ,2,8, ,
, , ,4,1,9, , ,5,
, , , ,8, , ,7,9,
El output debería ser:
El Sudoku no tiene solución
Sugerencias:
1, ,3,4,
3,4,1,2,
,3,2,1,
4,1, ,3,
Crea una aplicación que pueda producir una cuadrícula inicial NxN que se pueda resolver.
En este caso, el input es la dimensión de la cuadrícula y el número inicial de espacios en blanco.
El output es una cadena CSV con el formato comentado en los casos anteriores o un mensaje indicando que los requisitos no se pueden satisfacer.
Ejemplo:
Para un input como el siguiente:
3 51
El output debería ser algo similar a:
5,3, , ,7, , , , ,
6, , ,1,9,5, , , ,
,9,8, , , , ,6, ,
8, , , ,6, , , ,3,
4, , ,8, ,3, , ,1,
7, , , ,2, , , ,6,
,6, , , , ,2,8, ,
, , ,4,1,9, , ,5,
, , , ,8, , ,7,9,
Sugerencias:
Como soy una persona olvidadiza, necesito un método que me ayude a recordar mi rutina matutina. Por eso he creado un programa que, según la hora del..
Historia: Durance ha encontrado un libro de magia en una de sus aventuras y ha decidido aprender a encantar sus armas. Debido a la naturaleza..
Resumen Esta kata es bastante avanzada, por lo que recomendamos que intentes resolverla una vez que hayas practicado TDD con otras katas más fáciles.
Suscríbete a nuestra newsletter para que podamos hacerte llegar recomendaciones de expertos y casos prácticos inspiradores