Informatique
L'objectif est d'écrire un programme de résolution de certains suduku en utilisant les commandes relatives aux ensembles de Python.
On rappelle que :
ens1 = set([1, 2, 3, 4, 5, 6]) ens2 = set([2, 3, 4, 7])
ens3 = set([6, 7, 8, 9]) print ens1 & ens2
set([2, 3, 4]) # L'intersection de ens1 et ens2 print ens1 | ens3
set([1, 2, 3, 4, 5, 6, 7, 8, 9]) # L'union de ens1 et ens3 print ens1 & ens3
set([6])
print ens1 ^ ens3
set([1, 2, 3, 4, 5, 7, 8, 9]) # la différence Symétrique de ens1 et ens3 print ens1 - ens2
set([1, 5, 6]) # La différence ensembliste ens1 - ens2 Exemples de grilles :
A=
9 4 1 3
2 4 9 5
1 5
3 2
7 6 1
6 1 3 4 7
8 5 3 2 1
5 9 2
3 4 6
B=
4 7
7 1
7 9 5 1
2 3 9 5
9 5 6 4 7
4 1 6 3
5 8 2 6
1 4
2 3
Une grille sera stockée sous forme de tableau.Les cases sont repérées par le couple (numéro de lignes, numéro de colonnes) appartenant à [|0,8|]2. Les blocs sont re- pérés par le couple (numéro de lignes, numéro de colonnes) appartenant à[|0,2|]2. Exemple : La case (4,6) appartient au bloc (1,2).
1. On dispose d'une fonction ligne prenant en entrée une grille de sudoku T et un entier i ∈ [0,8] et retournant l'ensemble des chires absents de la ligne i. Ecrire de même la fonction colonne. Compléter de même la fonction bloc.
2. Ecrire une procédure possibilite prenant en entrée une grille de sudoku T et un couple d'entiers (l,c) compris appartenant à [0,8] et retournant l'ensemble des chires pouvant être plaçés dans la case (l,c).
Remarque : Si la case (l,c) est déjà aecté par le chire b alors la procédure doit retourner pour cette case l'ensemble {b}
1
3. On dispose d'une procédure vuepossibilite prenant en entrée une grille de sudoku T et retournant un tableau 9×9 où pour chaque couple d'entiers (i, j) compris appartenant à [0,8] la case de coordonnées (i, j) contient l'ensemble possibi- lite(i, j) des chires pouvant être plaçés dans la case (i, j).
On utilisera : A[i,j]= list(possibilite(A,i,j))[0]
4. Si pour un couple (i, j) l'ensemble possibilite(i, j) contient un unique chire a alors la case (i, j) doit être nécessairement aectée du chire a.
Ecrire une procédure methode1 prenant en entrée une grille de sudoku T et remplissant cette grille en utilisant la remarque précédente.
5. Si pour une ligne donnée de numéro i le chire a n'est présent qu'une unique fois dans les ensembles possibilite(i, j) pour j décrivant [0,8] alors, en notant j0 le numéro de colonne de l'unique ensemble possibilite(i, j0) contenant le chire a, la case (i, j0) doit être nécessairement aectée du chire a.
Ceci étant également vrai pour les colonnes et les blocs. En utilisant la remarque précédente, compléter la procédure methode2 prenant en entrée une grille de sudoku T et retournant cette grille totalement ou partiellement remplie
6. On dispose d'une fonction testtab prenant en entrée deux grilles de sudoku A et B et retourant (A==B).
Ecrire une procédure scann de complétion des grilles de sudoku en combinant les deux méthodes précédentes.
2