fork download
  1. :- set_prolog_flag(verbose,silent).
  2. :- prompt(_, '').
  3. :- use_module(library(readutil)).
  4. :- use_module(library(clpfd)).
  5.  
  6. sudoku(Rows) :-
  7. length(Rows, 9), maplist(length_(9), Rows),
  8. append(Rows, Vs), Vs ins 1..9,
  9. maplist(all_distinct, Rows),
  10. transpose(Rows, Columns), maplist(all_distinct, Columns),
  11. Rows = [A,B,C,D,E,F,G,H,I],
  12. blocks(A, B, C), blocks(D, E, F), blocks(G, H, I).
  13.  
  14. length_(L, Ls) :- length(Ls, L).
  15.  
  16. blocks([], [], []).
  17. blocks([N1,N2,N3|Ns1], [N4,N5,N6|Ns2], [N7,N8,N9|Ns3]) :-
  18. all_distinct([N1,N2,N3,N4,N5,N6,N7,N8,N9]),
  19. blocks(Ns1, Ns2, Ns3).
  20.  
  21.  
  22. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  23.  
  24. show_sudoku(Puzzle) :-
  25. maplist(label, Puzzle), maplist(portray_clause, Puzzle).
  26. gen_sudoku(Puzzle) :- sudoku(Puzzle), show_sudoku(Puzzle).
  27. solve_sudoku(Puzzle) :- sudoku(Puzzle), show_sudoku(Puzzle).
  28.  
  29. problem(1, P) :- % shokyuu
  30. P = [[1,_,_,8,_,4,_,_,_],
  31. [_,2,_,_,_,_,4,5,6],
  32. [_,_,3,2,_,5,_,_,_],
  33. [_,_,_,4,_,_,8,_,5],
  34. [7,8,9,_,5,_,_,_,_],
  35. [_,_,_,_,_,6,2,_,3],
  36. [8,_,1,_,_,_,7,_,_],
  37. [_,_,_,1,2,3,_,8,_],
  38. [2,_,5,_,_,_,_,_,9]].
  39.  
  40.  
  41. problem(2, P) :- % shokyuu
  42. P = [[_,_,2,_,3,_,1,_,_],
  43. [_,4,_,_,_,_,_,3,_],
  44. [1,_,5,_,_,_,_,8,2],
  45. [_,_,_,2,_,_,6,5,_],
  46. [9,_,_,_,8,7,_,_,3],
  47. [_,_,_,_,4,_,_,_,_],
  48. [8,_,_,_,7,_,_,_,4],
  49. [_,9,3,1,_,_,_,6,_],
  50. [_,_,7,_,6,_,5,_,_]].
  51.  
  52. problem(3, P) :-
  53. P = [[1,_,_,_,_,_,_,_,_],
  54. [_,_,2,7,4,_,_,_,_],
  55. [_,_,_,5,_,_,_,_,4],
  56. [_,3,_,_,_,_,_,_,_],
  57. [7,5,_,_,_,_,_,_,_],
  58. [_,_,_,_,_,9,6,_,_],
  59. [_,4,_,_,_,6,_,_,_],
  60. [_,_,_,_,_,_,_,7,1],
  61. [_,_,_,_,_,1,_,3,_]].
  62.  
  63.  
  64.  
  65.  
  66. main:-
  67. problem(1, P),
  68. solve_sudoku(P),
  69.  
  70. :- main.
  71.  
Success #stdin #stdout 0.34s 8532KB
stdin
Standard input is empty
stdout
[1, 5, 6, 8, 9, 4, 3, 2, 7].
[9, 2, 8, 7, 3, 1, 4, 5, 6].
[4, 7, 3, 2, 6, 5, 9, 1, 8].
[3, 6, 2, 4, 1, 7, 8, 9, 5].
[7, 8, 9, 3, 5, 2, 6, 4, 1].
[5, 1, 4, 9, 8, 6, 2, 7, 3].
[8, 3, 1, 5, 4, 9, 7, 6, 2].
[6, 9, 7, 1, 2, 3, 5, 8, 4].
[2, 4, 5, 6, 7, 8, 1, 3, 9].