Sudoku Solveur

Code source:

Projet réalisé en python

Pour mon premier projet, j’ai décidé de développer un solveur de Sudoku en Python. Ce projet m’a permis de renforcer mes compétences en programmation tout en me familiarisant avec des concepts avancés comme la récursivité, la manipulation des matrices, et l’optimisation des algorithmes. Voici une présentation détaillée du fonctionnement de mon solveur.

Description du Projet

Le solveur de Sudoku que j’ai créé est capable de remplir une grille de Sudoku vide ou partiellement remplie, de vérifier la validité des entrées, et de résoudre la grille en trouvant toutes les solutions possibles. Le programme utilise des techniques de backtracking pour explorer toutes les possibilités et s’assurer que les solutions respectent les règles du Sudoku.

Fonctionnalités Clés

  1. Création d’une Grille Vide:
   def emptySudoku():
       m = [['.' for _ in range(9)] for _ in range(9)]
       return m

Cette fonction initialise une grille de Sudoku vide représentée par une matrice 9×9 remplie de points (‘.’).

  1. Ajout de Valeurs:
   def add(m, row, col, val):
       # Code pour ajouter des valeurs à la grille

La fonction add permet d’ajouter des valeurs comprises entre 1 et 9 à la grille, avec des vérifications pour s’assurer de la validité des entrées.

  1. Affichage de la Grille:
   def printSudoku(m):
       # Code pour afficher la grille de Sudoku

printSudoku affiche la grille de Sudoku de manière lisible, avec des séparateurs pour les sous-grilles 3×3.

  1. Remplissage de la Grille:
   def fillSudoku():
       # Code pour remplir la grille de Sudoku

fillSudoku permet à l’utilisateur de remplir la grille de Sudoku manuellement en entrant les valeurs une par une.

  1. Recherche de Solutions:
   def sodokuPosibily(m, mult):
       # Code pour trouver toutes les solutions possibles

Cette fonction utilise la récursivité pour explorer toutes les solutions possibles à partir de la grille partiellement remplie.

  1. Évaluation des Solutions Uniques:
   def eval_uniq(t):
       # Code pour évaluer les solutions uniques

eval_uniq vérifie si une solution unique peut être déterminée pour chaque case vide.

  1. Vérification de la Validité du Sudoku:
   def is_valid_sudoku(sudoku_grid):
       # Code pour vérifier la validité du Sudoku

Cette fonction s’assure que la grille respecte les règles du Sudoku, à savoir qu’il n’y a pas de doublons dans les lignes, les colonnes, et les sous-grilles 3×3.

Exemple de Fonctionnement

Voici un exemple de fonctionnement du solveur de Sudoku. L’utilisateur est invité à entrer les valeurs une par une, et le programme résout ensuite la grille en affichant toutes les solutions possibles.

def main(sudoku):
    clear_terminal()
    m = sudoku
    print("sodoku:")
    printSudoku(m)
    if(count_non_empty_elements(m) < 17):
        print("Le sudoku n'admet pas de solution, un sudoku doit avoir au minimum 17 valeurs.")
        return
    mult = input("Voulez-vous chercher toutes les solutions existantes (y/n)?: ")
    mult = True if mult == 'y' else False
    res = sodokuPosibily(m, mult)
    if len(res) == 0:
        print("Le sudoku n'admet aucune solution.")
    else:
        for i, s in enumerate(res):
            print(f"Solution {i+1}:")
            printSudoku(s)

Conclusion

Ce projet de solveur de Sudoku m’a permis de développer des compétences précieuses en programmation, notamment en Python. J’ai pu aborder des concepts tels que la manipulation de matrices, la récursivité, et la vérification des contraintes, ce qui m’a aidé à comprendre et à résoudre des problèmes complexes. Je suis très fier du résultat et j’ai hâte de travailler sur d’autres projets passionnants à l’avenir.

Code source: