Information

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

Sign in

[Q5a] Sudoku - lignes, colonnes, carrés

Pour rappel: le contexte est disponible dans la question 5 introduction.

En utilisant les méthodes get_carre et get_val des classes SudokuPuzzle et SudokuCarre, respectivement, ajoutez les méthodes suivantes à la classe SudokuPuzzle:

  • Une méthode get_carre_valeurs(self, x, y), où 0 ≤ x < N et 0 ≤ y < N qui retourne une liste de toutes les valeurs apparaissant dans le SudokuCarre qui se trouve à la position (x, y) du puzzle Sudoku. Si une valeur apparaît plusieurs fois dans ce carré, elle se retrouvera plusieurs fois dans la liste retournée.
  • Une méthode get_ligne(self, ligne), où 0 ≤ ligne < N * N, qui retourne une liste de toutes les valeurs apparaissant à une certaine ligne du puzzle Sudoku. Si une valeur apparaît plusieurs fois sur une ligne, elle se retrouvera plusieurs fois dans la liste retournée.
  • Une méthode get_colonne(self, colonne), où 0 ≤ colonne < N * N qui retourne une liste de toutes les valeurs apparaissant à une certaine colonne du puzzle Sudoku. Si une valeur apparaît plusieurs fois sur un colonne, elle se retrouvera plusieurs fois dans la liste retournée.

Quelques exemples. Pour le SudokuPuzzle p de dimension 2 de l’exemple du contexte de cette question 5, on a :

p.get_carre_valeurs(0, 1)
# retourne la liste des valeurs du carré à la position (0, 1)
# par exemple: [4, 1, 2, 3]
p.get_ligne(3)
# retourne la liste avec les valeurs de la ligne 3 du Sudoku
# par exemple: [2, 3, 1, 4]
p.get_colonne(2)
# rerourne la liste avec les valeurs de la colonne 2
# par exemple: [3, 4, 2, 1]

# pour illustrer plus visuellement :
# 1 4 | 3 2
# 3 2 | 4 1
# ----------
# 4 1 | 2 3
# 2 3 | 1 4 <- dernière ligne : [2,3,1,4]
#       ^
#   ^   |
#   |   | avant dernière colonne : [3,4,2,1]
#   |
# carré à la position (0,1) : [4,1,2,3]

Les méthodes demandées sont les suivantes:

def get_carre_valeurs(self, x, y):
    """
    @pre:  0 ≤ x < N
           0 ≤ y < N
    @post: retourne une liste de toutes les valeurs apparaissant dans le SudokuCarre
           qui se trouve à la position (x, y) du puzzle Sudoku
           Si une valeur apparaît plusieurs fois dans ce carré,
           elle se retrouvera plusieurs fois dans la liste retournée.
    """
    # à compléter

def get_ligne(self, ligne):
    """
    @pre:  0 ≤ ligne < N x N
    @post: retourne une liste de toutes les valeurs apparaissant
           à une certaine ligne du puzzle Sudoku
           Si une valeur apparaît plusieurs fois sur une ligne
           elle se retrouvera plusieurs fois dans la liste retournée
    """
    # à compléter

def get_colonne(self, colonne):
    """
    @pre:  0 ≤ colonne < N x N
    @post: retourne une liste de toutes les valeurs apparaissant
           à une certaine colonne du puzzle Sudoku
           Si une valeur apparaît plusieurs fois sur une colonne
           elle se retrouvera plusieurs fois dans la liste retournée
    """
    # à compléter

Si nécessaire vous pouvez aussi définir des fonctions auxiliaires.


Question 1: getters
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 vos méthodes getters et d’éventuelles fonctions auxiliaires ci-dessus (il ne faut pas les recopier ici).

Vous pouvez générer une matrice de test avec la fonction create_valid_m(). Pour tester une autre matrice, vous pouvez les créer de la façon indiquée dans l'énoncé.

Exemple: