Ce projet a pour but de résoudre des grilles de Sudoku en python, sans dépendance et le plus rapidement possible.
La philosophie est d'utiliser un minimum d'itérations sur la grille pour réduire le temps d'execution.
python run.py
Le code s'articule autour de 3 classes :
- GridCell
Responsable de la position et des possibilités d'une cellule du Sudoku.
Lorsqu'il ne reste plus que 1 possibilité, GridCell notifie GridProcessor.
- Grid
Responsable de la grille du Sudoku.
Cette classe propose des méthodes pour filtrer la grille, par ligne, par colonne, par bloc 3x3 et par valeur.
Grid.grid représente la grille du sudoku.
Grid.possibilities représente le brouillon utilisé pour résoudre la grille.
Pour chaque cellule non résolue, Grid.possibilities contient une instance de GridCell qui sera retirée dès que la valeur de la cellule est trouvée.
- GridProcessor
Responsable de la résolution du Sudoku.
Cette classe traite les notifications envoyées par les instances de GridCell. Tant qu'une nouvelle cellule est résolue, l'ensemble des stratégies pour réduire des possibilités sont exécutées. Ces stratégies utilisent un ensemble de filtres mis à disposition par les méthodes de Grid.