Pour rappel: le contexte est disponible dans la question 5 introduction.
En utilisant les méthodes implémentées lors de l’exercice précédente, écrivez maintenant une méthode est_correct(self)
qui retourne simplement True
(ou False
) si le Sudoku est correct (ou pas). Le Sudoku de dimension N est correct si et seulement si chaque colonne (verticale), chaque ligne (horizontale) et chaque carré contient exactement une fois chaque valeur entre 1 et N * N.
Il n'est pas nécessaire de réécrire les méthodes implémentées à la question 5a. Des versions correctes sont automatiquement ajoutées aux classes dans lesquelles votre code sera inséré pour cet exercice.
Le Sudoku p
de la question 5 introduction est correct :
p.est_correct() # True #Ceci est un exemple d’un Sudoku pour lequel la fonction doit retourner False : # 1 2 | 3 4 # 3 4 | 1 2 # --------- # 2 1 | 2 1 <- cette ligne contient les valeurs 1 et 2 deux fois. # 4 3 | 4 3 <- cette ligne contient les valuers 3 et 4 deux fois.
Remarque:
- Il peut être utile d’écrire une fonction auxiliaire qui vérifie pour une liste donnée si cette liste contient une fois chaque valeur entre 1 et n.
- Il est vraiment nécessaire de vérifier tous les lignes, tous les colonnes et tous les carrés.
- Vous pouvez utiliser la fonction
sorted
si vous en avez besoin.
La méthode demandée est la suivante:
def est_correct(self): """ @pre: ce Sudoku est bien formé, de dimension `self.dimension` @post: retourne un booléen True si le puzzle est correct False sinon """ # à compléter
Si nécessaire vous pouvez aussi définir des fonctions auxiliaires.