Advertisement
Guest User

sudoku riddle Prolog solver

a guest
Dec 4th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 3.26 KB | None | 0 0
  1. % This is a verbose but straightforward formulation of Sudoku
  2. % using constraint logic programming for finite domains.
  3. % credit https://github.com/fatuhoku/prolog-sudoku/blob/master/sudoku.pl
  4. % sudoku([[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_],[_,_,_,_,_,_,_,_,_]])
  5. % sudoku([A,B,C,D,E,F,G,H,I]).
  6. % run as "sudoku([A,B,C,D,E,F,G,H,I])." or "solve(P)."
  7. :- use_module(library(clpfd)).
  8.  
  9. solve(P):-
  10.     sudoku(P),
  11.     forall(member(R,P), (print(R),nl)).
  12.  
  13. sudoku([[A1,B1,C1,D1,E1,F1,G1,H1,I1],
  14.         [A2,B2,C2,D2,E2,F2,G2,H2,I2],
  15.         [A3,B3,C3,D3,E3,F3,G3,H3,I3],
  16.         [A4,B4,C4,D4,E4,F4,G4,H4,I4],
  17.         [A5,B5,C5,D5,E5,F5,G5,H5,I5],
  18.         [A6,B6,C6,D6,E6,F6,G6,H6,I6],
  19.         [A7,B7,C7,D7,E7,F7,G7,H7,I7],
  20.         [A8,B8,C8,D8,E8,F8,G8,H8,I8],
  21.         [A9,B9,C9,D9,E9,F9,G9,H9,I9]]):-
  22.     Vars = [A1,B1,C1,D1,E1,F1,G1,H1,I1,
  23.             A2,B2,C2,D2,E2,F2,G2,H2,I2,
  24.             A3,B3,C3,D3,E3,F3,G3,H3,I3,
  25.             A4,B4,C4,D4,E4,F4,G4,H4,I4,
  26.             A5,B5,C5,D5,E5,F5,G5,H5,I5,
  27.             A6,B6,C6,D6,E6,F6,G6,H6,I6,
  28.             A7,B7,C7,D7,E7,F7,G7,H7,I7,
  29.             A8,B8,C8,D8,E8,F8,G8,H8,I8,
  30.             A9,B9,C9,D9,E9,F9,G9,H9,I9],
  31.     Vars ins 1..9,
  32.     % Rows
  33.     all_different([A1,B1,C1,D1,E1,F1,G1,H1,I1]),
  34.     all_different([A2,B2,C2,D2,E2,F2,G2,H2,I2]),
  35.     all_different([A3,B3,C3,D3,E3,F3,G3,H3,I3]),
  36.     all_different([A4,B4,C4,D4,E4,F4,G4,H4,I4]),
  37.     all_different([A5,B5,C5,D5,E5,F5,G5,H5,I5]),
  38.     all_different([A6,B6,C6,D6,E6,F6,G6,H6,I6]),
  39.     all_different([A7,B7,C7,D7,E7,F7,G7,H7,I7]),
  40.     all_different([A8,B8,C8,D8,E8,F8,G8,H8,I8]),
  41.     all_different([A9,B9,C9,D9,E9,F9,G9,H9,I9]),
  42.  
  43.     % Column
  44.     all_different([A1,A2,A3,A4,A5,A6,A7,A8,A9]),
  45.     all_different([B1,B2,B3,B4,B5,B6,B7,B8,B9]),
  46.     all_different([C1,C2,C3,C4,C5,C6,C7,C8,C9]),
  47.     all_different([D1,D2,D3,D4,D5,D6,D7,D8,D9]),
  48.     all_different([E1,E2,E3,E4,E5,E6,E7,E8,E9]),
  49.     all_different([F1,F2,F3,F4,F5,F6,F7,F8,F9]),
  50.     all_different([G1,G2,G3,G4,G5,G6,G7,G8,G9]),
  51.     all_different([H1,H2,H3,H4,H5,H6,H7,H8,H9]),
  52.     all_different([I1,I2,I3,I4,I5,I6,I7,I8,I9]),
  53.  
  54.     %Squares
  55.     all_different([A1,A2,A3,B1,B2,B3,C1,C2,C3]),
  56.     all_different([D1,D2,D3,E1,E2,E3,F1,F2,F3]),
  57.     all_different([G1,G2,G3,H1,H2,H3,I1,I2,I3]),
  58.  
  59.     all_different([A4,A5,A6,B4,B5,B6,C4,C5,C6]),
  60.     all_different([D4,D5,D6,E4,E5,E6,F4,F5,F6]),
  61.     all_different([G4,G5,G6,H4,H5,H6,I4,I5,I6]),
  62.  
  63.     all_different([A7,A8,A9,B7,B8,B9,C7,C8,C9]),
  64.     all_different([D7,D8,D9,E7,E8,E9,F7,F8,F9]),
  65.     all_different([G7,G8,G9,H7,H8,H9,I7,I8,I9]),
  66.     C1 + C2 + D1 + D2 #= 12,
  67.     D1 + D2 + E1 + E2 #= 25,
  68.     E1 + E2 + F1 + F2 #= 28,
  69.     F1 + F2 + G1 + G2 #= 23,
  70.     G2 + G3 + H2 + H3 #= 25,
  71.     H3 + I3 + H4 + I4 #= 28,
  72.     H4 + I4 + H5 + I5 #= 25,
  73.     H5 + I5 + H6 + I6 #= 19,
  74.     H6 + I6 + H7 + I7 #= 12,
  75.     G7 + H7 + G8 + H8 #= 12,
  76.     C8 + C9 + D8 + D9 #= 28,
  77.     D8 + D9 + E8 + E9 #= 20,
  78.     E8 + E9 + F8 + F9 #= 12,
  79.     F8 + F9 + G8 + G9 #= 12,
  80.     B7 + B8 + C7 + C8 #= 19,
  81.     A3 + B3 + A4 + B4 #= 12,
  82.     A4 + B4 + A5 + B5 #= 15,
  83.     A5 + B5 + A6 + B6 #= 23,
  84.     A6 + B6 + A7 + B7 #= 25,
  85.     B2 + C2 + B3 + C3 #= 12,
  86.     label(Vars).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement