Ceci est le contexte et le code utilisés dans la question 5a et la question 5b, il est conseillé de commencer par le lire.
Pour rappel: il est possible d'ouvrir une fenêtre supplémentaire d'INGInious.
Un puzzle Sudoku de dimension N, dont un exemple de dimension 2 est donné dans l’image ci-dessous, peut être représenté par une ensemble de N * N carrés, chacun de taille N * N.
Chaque carré a une position (X,Y) dans le puzzle Sudoku, et dans chaque carré, chaque cellule a également une position (X,Y), ou 0 ≤ X < N et 0 ≤ Y < N. Par exemple, dans l’image ci-dessus, le carré à la position (X=1,Y=0) est le suivant, et contient lui-même une valeur de 4 à sa position (X=0,Y=1).
Une implémentation possible de cette représentation d’un puzzle Sudoku est fournie par les classes
SudokuPuzzle
et SudokuCarre
suivantes :class SudokuPuzzle: def __init__(self,dimension) : """ Crée un SudokuPuzzle de dimension `dimension` avec tous les éléments initialisés à 0. """ self.dimension = dimension self.carres = [ [ SudokuCarre(x,y,dimension) \ for x in range (dimension) ] \ for y in range (dimension)] def get_carre(self,x,y) : """ Retourne le SudokuCarre qui se trouve à la position (x, y) dans ce Sudoku. """ return self.carres[y][x] def __str__(self): """ Retourne un texte permettant de représenter le Sudoku. """ s = "" for y in range(len(self.carres)) : for x in range (len(self.carres[y])) : s += str(self.get_carre(x,y)) s += "\n" return s class SudokuCarre: def __init__(self,x,y,dimension) : """ Crée un SudokuCarre de taille `dimension` x `dimension`, avec toutes ses valeurs initialisées à 0. """ self.xcoord_carre = x self.ycoord_carre = y self.cells = [ [ 0 for x in range(dimension) ] for y in range(dimension) ] def set_val(self,x,y,val) : """ Assigne une valeur `val` à la cellule se trouvant à la position (x, y) de ce carré. """ self.cells[y][x] = val def get_val(self,x,y) : """ Retourne la valeur qui se trouve à la position (x, y) de ce carré. """ return self.cells[y][x] def __str__(self): """ Retourne un texte permettant de représenter le contenu de ce carré. """ s = "carré (" + str(self.xcoord_carre) + "," + str(self.ycoord_carre) + ") : " s += str(self.cells) s += " " return s
En utilisant ces classes, le code suivant construit le puzzle Sudoku montré ci-dessus:
# créer un puzzle Sudoku vide de dimension 2 p = SudokuPuzzle(2) # remplir les carrés et leurs valeurs # initiliaser le carré à la position (0,0) p.get_carre(0,0).set_val(0,0,1) p.get_carre(0,0).set_val(1,0,4) p.get_carre(0,0).set_val(0,1,3) p.get_carre(0,0).set_val(1,1,2) # initiliaser le carré à la position (1,0) p.get_carre(1,0).set_val(0,0,3) p.get_carre(1,0).set_val(1,0,2) p.get_carre(1,0).set_val(0,1,4) p.get_carre(1,0).set_val(1,1,1) # initiliaser le carré à la position (0,1) p.get_carre(0,1).set_val(0,0,4) p.get_carre(0,1).set_val(1,0,1) p.get_carre(0,1).set_val(0,1,2) p.get_carre(0,1).set_val(1,1,3) # initiliaser le carré à la position (1,1) p.get_carre(1,1).set_val(0,0,2) p.get_carre(1,1).set_val(1,0,3) p.get_carre(1,1).set_val(0,1,1) p.get_carre(1,1).set_val(1,1,4) # imprimer le sudoku print(p) # carré (0,0) : [[1, 4], [3, 2]] carré (1,0) : [[3, 2], [4, 1]] # carré (0,1) : [[4, 1], [2, 3]] carré (1,1) : [[2, 3], [1, 4]] # ce qui correspond au sudoku suivant : # 1 4 | 3 2 # 3 2 | 4 1 # --------- # 4 1 | 2 3 # 2 3 | 1 4