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
sortedsi 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.
INGInious