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
- 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 (‘.’).
- 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.
- 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.
- 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.
- 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.
- É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.
- 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: