Menu
CoddyTech

Sudoku Solver

DifficileRetour sur tracepython iconjava iconcpp iconc iconjs icon+10

Une grille de sudoku est une grille de 9 × 9 divisée en neuf carrés de 3 × 3. Dans une grille résolue, chaque ligne, chaque colonne et chaque carré contient chaque chiffre de 1 à 9 une seule fois.

Le puzzle est fourni sous la forme de 9 chaînes de caractères, une par ligne en partant du haut ; un . représente une case vide. Remplis toutes les cases vides et renvoie la grille résolue sous la même forme. La grille admet exactement une solution.

Fonction

solveSudoku(board: string-array) → string-array
boardstring-array
les 9 lignes du puzzle, un point dans chaque case vide
Renvoiestring-array
les 9 lignes du plateau résolu

Contraintes

  • board contient 9 chaînes de 9 caractères.
  • Chaque caractère est . ou l’un des chiffres 1 à 9.
  • Les chiffres donnés ne se répètent jamais dans une ligne, une colonne ou un bloc.
  • Le plateau a exactement une solution.

Exemples

Entrée
board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]
Sortie
["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]
Explication
La ligne du haut 9.7.....6 contient déjà 9, 7 et 6, donc ses six cases vides accueillent 1, 2, 3, 4, 5 et 8. Les colonnes et les blocs déterminent où placer chacun, et la ligne devient 957214386.
challenge icon

Pour aller plus loin

Dans un sudoku killer, les cages de cases doivent également totaliser les sommes indiquées. Comment ajouteriez-vous cette règle à la recherche et l'utiliseriez-vous pour élaguer les branches plus tôt ?

Réinitialiser le code
def solveSudoku(board):
    # Écrivez le code ici

Test #1

Argument

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

Résultat attendu

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