Menu
CoddyTech

Sudoku Solver

DifícilBacktrackingpython iconjava iconcpp iconc iconjs icon+10

Un tablero de sudoku es una cuadrícula de 9 × 9 dividida en nueve recuadros de 3 × 3. En un tablero resuelto, cada fila, cada columna y cada recuadro contiene cada dígito del 1 al 9 exactamente una vez.

El rompecabezas se presenta como 9 cadenas, una por fila empezando desde arriba; un . es una celda vacía. Rellena todas las celdas vacías y devuelve el tablero resuelto en el mismo formato. El tablero tiene exactamente una solución.

Función

solveSudoku(board: string-array) → string-array
boardstring-array
las 9 filas del rompecabezas, un punto en cada celda vacía
Devuelvestring-array
las 9 filas del tablero resuelto

Restricciones

  • board contiene 9 cadenas de longitud 9.
  • Cada carácter es . o uno de los dígitos 1 a 9.
  • Los dígitos dados nunca se repiten dentro de una fila, una columna o una caja.
  • El tablero tiene exactamente una solución.

Ejemplos

Entrada
board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]
Salida
["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]
Explicación
La fila superior 9.7.....6 ya contiene 9, 7 y 6, así que sus seis casillas vacías llevan 1, 2, 3, 4, 5 y 8. Las columnas y los bloques determinan dónde va cada uno, y la fila queda 957214386.
challenge icon

Para ir más allá

En un sudoku killer, las jaulas de celdas también deben sumar los valores indicados. ¿Cómo añadirías esa regla a la búsqueda y la usarías para descartar ramas antes?

Restablecer código
def solveSudoku(board):
    # Escribe el código aquí

Prueba #1

Argumento

board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]

Salida Esperada

["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]