Information

Author(s) Tanguy De Bels
Deadline No deadline
Submission limit No limitation

Sign in

[Q5b] Sudoku - correct

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.


Question 1: est_correct
Question 2: Zone de test

Insérez votre code de test optionnel ci-dessous. Vous pouvez utiliser print pour tester votre programme. Votre code de test sera exécuté à la suite de la définition de votre méthode est_correct et d’éventuelles fonctions auxiliaires ci-dessus (il ne faut pas les recopier ici).

Vous pouvez générer des matrices de test avec les fonction create_correct_m(), create_not_correct_col(), create_not_correct_line() et create_not_correct_square(). Pour tester une autre matrice, vous pouvez les créer de la façon indiquée dans la question 5 introduction.

Exemple: