Projet PROLOG sudoku
-queen-
-
charaf Maroc -
charaf Maroc -
Bonjour à tous,
je dois réaliser un programme Prolog capable de résoudre des grilles de sudoku.
tout d'abord on me demande de générer une grille 9x9 vide de cette forme:
[[9,9,0],[9,8,0],.....[9,1,0],[8,9,0],[8,8,0]....[8,1,0],[7,9,0],[7,8,0],...[7,1,0],[6,9,0].....[6,1,0],....[1,1,0]]
(j'ai abrégé la liste car trop long à écrire).
Mon problème est que je ne vois pas comment construire une liste de taille 81 éléments, dont chaque élément est lui même une liste mais cette fois de 3 chiffres.
J'ai essayé de construire des listes puis de faire un append mais je n'arrive pas au bon résultat, de plus mes listes n'étaient pas constituées des chiffres comme indiqué ci-dessus car j'utilisais length (donc attribution de _G0238 et autres)
Merci de votre aide, j'en ai grandement besoin
je dois réaliser un programme Prolog capable de résoudre des grilles de sudoku.
tout d'abord on me demande de générer une grille 9x9 vide de cette forme:
[[9,9,0],[9,8,0],.....[9,1,0],[8,9,0],[8,8,0]....[8,1,0],[7,9,0],[7,8,0],...[7,1,0],[6,9,0].....[6,1,0],....[1,1,0]]
(j'ai abrégé la liste car trop long à écrire).
Mon problème est que je ne vois pas comment construire une liste de taille 81 éléments, dont chaque élément est lui même une liste mais cette fois de 3 chiffres.
J'ai essayé de construire des listes puis de faire un append mais je n'arrive pas au bon résultat, de plus mes listes n'étaient pas constituées des chiffres comme indiqué ci-dessus car j'utilisais length (donc attribution de _G0238 et autres)
Merci de votre aide, j'en ai grandement besoin
A voir également:
- Projet PROLOG sudoku
- Filigrane projet - Guide
- Gant projet - Télécharger - Gestion de projets
- Projet windows movie maker - Télécharger - Montage & Édition
- Wbs projet - Télécharger - Gestion de projets
- Projet voltaire correction d orthographe - Télécharger - Études & Formations
1 réponse
une solution de sudoku sous gnu prolog :
sudoku(Grid, Vars) :-
% Definition des variables (grille de sudoku)
Vars =[
A1,A2,A3,A4,A5,A6,A7,A8,A9,
B1,B2,B3,B4,B5,B6,B7,B8,B9,
C1,C2,C3,C4,C5,C6,C7,C8,C9,
D1,D2,D3,D4,D5,D6,D7,D8,D9,
E1,E2,E3,E4,E5,E6,E7,E8,E9,
F1,F2,F3,F4,F5,F6,F7,F8,F9,
G1,G2,G3,G4,G5,G6,G7,G8,G9,
H1,H2,H3,H4,H5,H6,H7,H8,H9,
I1,I2,I3,I4,I5,I6,I7,I8,I9],
% Les cases prennent des valeurs de 1 a 9
fd_domain(Vars, 1, 9),
% Tous les chiffres d'une ligne sont differents
fd_all_different([A1,A2,A3,A4,A5,A6,A7,A8,A9]),
fd_all_different([B1,B2,B3,B4,B5,B6,B7,B8,B9]),
fd_all_different([C1,C2,C3,C4,C5,C6,C7,C8,C9]),
fd_all_different([D1,D2,D3,D4,D5,D6,D7,D8,D9]),
fd_all_different([E1,E2,E3,E4,E5,E6,E7,E8,E9]),
fd_all_different([F1,F2,F3,F4,F5,F6,F7,F8,F9]),
fd_all_different([G1,G2,G3,G4,G5,G6,G7,G8,G9]),
fd_all_different([H1,H2,H3,H4,H5,H6,H7,H8,H9]),
fd_all_different([I1,I2,I3,I4,I5,I6,I7,I8,I9]),
% Tous les chiffres d'une colonne sont differents
fd_all_different([A1,B1,C1,D1,E1,F1,G1,H1,I1]),
fd_all_different([A2,B2,C2,D2,E2,F2,G2,H2,I2]),
fd_all_different([A3,B3,C3,D3,E3,F3,G3,H3,I3]),
fd_all_different([A4,B4,C4,D4,E4,F4,G4,H4,I4]),
fd_all_different([A5,B5,C5,D5,E5,F5,G5,H5,I5]),
fd_all_different([A6,B6,C6,D6,E6,F6,G6,H6,I6]),
fd_all_different([A7,B7,C7,D7,E7,F7,G7,H7,I7]),
fd_all_different([A8,B8,C8,D8,E8,F8,G8,H8,I8]),
fd_all_different([A9,B9,C9,D9,E9,F9,G9,H9,I9]),
% Tous les chiffres d'un carre sont differents
fd_all_different([A1,A2,A3,B1,B2,B3,C1,C2,C3]),
fd_all_different([A4,A5,A6,B4,B5,B6,C4,C5,C6]),
fd_all_different([A7,A8,A9,B7,B8,B9,C7,C8,C9]),
fd_all_different([D1,D2,D3,E1,E2,E3,F1,F2,F3]),
fd_all_different([D4,D5,D6,E4,E5,E6,F4,F5,F6]),
fd_all_different([D7,D8,D9,E7,E8,E9,F7,F8,F9]),
fd_all_different([G1,G2,G3,H1,H2,H3,I1,I2,I3]),
fd_all_different([G4,G5,G6,H4,H5,H6,I4,I5,I6]),
fd_all_different([G7,G8,G9,H7,H8,H9,I7,I8,I9]),
nl, write('==================='), nl, write('==================='), nl,
%%%%% VALEUR DU PLATEAU %%%%%
grid(Grid, Vars),
%%%%% RECHERCHE DE SOLUTIONS %%%%%
fd_labeling(Vars).
% Affichage /* printGrid(Vars).*/
grid([],[]).
grid([0|Q1],[_|Q2]) :-
grid(Q1,Q2).
grid([Val|Q1],[Var|Q2]) :-
Var #= Val,
grid(Q1,Q2).
sudoku(Grid, Vars) :-
% Definition des variables (grille de sudoku)
Vars =[
A1,A2,A3,A4,A5,A6,A7,A8,A9,
B1,B2,B3,B4,B5,B6,B7,B8,B9,
C1,C2,C3,C4,C5,C6,C7,C8,C9,
D1,D2,D3,D4,D5,D6,D7,D8,D9,
E1,E2,E3,E4,E5,E6,E7,E8,E9,
F1,F2,F3,F4,F5,F6,F7,F8,F9,
G1,G2,G3,G4,G5,G6,G7,G8,G9,
H1,H2,H3,H4,H5,H6,H7,H8,H9,
I1,I2,I3,I4,I5,I6,I7,I8,I9],
% Les cases prennent des valeurs de 1 a 9
fd_domain(Vars, 1, 9),
% Tous les chiffres d'une ligne sont differents
fd_all_different([A1,A2,A3,A4,A5,A6,A7,A8,A9]),
fd_all_different([B1,B2,B3,B4,B5,B6,B7,B8,B9]),
fd_all_different([C1,C2,C3,C4,C5,C6,C7,C8,C9]),
fd_all_different([D1,D2,D3,D4,D5,D6,D7,D8,D9]),
fd_all_different([E1,E2,E3,E4,E5,E6,E7,E8,E9]),
fd_all_different([F1,F2,F3,F4,F5,F6,F7,F8,F9]),
fd_all_different([G1,G2,G3,G4,G5,G6,G7,G8,G9]),
fd_all_different([H1,H2,H3,H4,H5,H6,H7,H8,H9]),
fd_all_different([I1,I2,I3,I4,I5,I6,I7,I8,I9]),
% Tous les chiffres d'une colonne sont differents
fd_all_different([A1,B1,C1,D1,E1,F1,G1,H1,I1]),
fd_all_different([A2,B2,C2,D2,E2,F2,G2,H2,I2]),
fd_all_different([A3,B3,C3,D3,E3,F3,G3,H3,I3]),
fd_all_different([A4,B4,C4,D4,E4,F4,G4,H4,I4]),
fd_all_different([A5,B5,C5,D5,E5,F5,G5,H5,I5]),
fd_all_different([A6,B6,C6,D6,E6,F6,G6,H6,I6]),
fd_all_different([A7,B7,C7,D7,E7,F7,G7,H7,I7]),
fd_all_different([A8,B8,C8,D8,E8,F8,G8,H8,I8]),
fd_all_different([A9,B9,C9,D9,E9,F9,G9,H9,I9]),
% Tous les chiffres d'un carre sont differents
fd_all_different([A1,A2,A3,B1,B2,B3,C1,C2,C3]),
fd_all_different([A4,A5,A6,B4,B5,B6,C4,C5,C6]),
fd_all_different([A7,A8,A9,B7,B8,B9,C7,C8,C9]),
fd_all_different([D1,D2,D3,E1,E2,E3,F1,F2,F3]),
fd_all_different([D4,D5,D6,E4,E5,E6,F4,F5,F6]),
fd_all_different([D7,D8,D9,E7,E8,E9,F7,F8,F9]),
fd_all_different([G1,G2,G3,H1,H2,H3,I1,I2,I3]),
fd_all_different([G4,G5,G6,H4,H5,H6,I4,I5,I6]),
fd_all_different([G7,G8,G9,H7,H8,H9,I7,I8,I9]),
nl, write('==================='), nl, write('==================='), nl,
%%%%% VALEUR DU PLATEAU %%%%%
grid(Grid, Vars),
%%%%% RECHERCHE DE SOLUTIONS %%%%%
fd_labeling(Vars).
% Affichage /* printGrid(Vars).*/
grid([],[]).
grid([0|Q1],[_|Q2]) :-
grid(Q1,Q2).
grid([Val|Q1],[Var|Q2]) :-
Var #= Val,
grid(Q1,Q2).