1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
%%% Sudoku Puzzle Solution %%%
solve_sudoku(L):-
% Declare the 4x4 Sudoku Puzzle Board as Cells
% where Rows are defined by [A-D] and Columns by [1-4]
Cells =
[
A1,A2,A3,A4,
B1,B2,B3,B4,
C1,C2,C3,C4,
D1,D2,D3,D4
],
% Define Bounds for Cell Values
possibleValue(A1),
possibleValue(A2),
possibleValue(A3),
possibleValue(A4),
possibleValue(B1),
possibleValue(B2),
possibleValue(B3),
possibleValue(B4),
possibleValue(C1),
possibleValue(C2),
possibleValue(C3),
possibleValue(C4),
possibleValue(D1),
possibleValue(D2),
possibleValue(D3),
possibleValue(D4),
% Ensure all Rows have distinct values
alldifferent([A1,A2,A3,A4]),
alldifferent([B1,B2,B3,B4]),
alldifferent([C1,C2,C3,C4]),
alldifferent([D1,D2,D3,D4]),
% Ensure all Columns have distinct values
alldifferent([A1,B1,C1,D1]),
alldifferent([A2,B2,C2,D2]),
alldifferent([A3,B3,C3,D3]),
alldifferent([A4,B4,C4,D4]),
% Ensure all Sub-matrices have distinct values
alldifferent([A1,A2,B1,B2]),
alldifferent([A3,A4,B3,B4]),
alldifferent([C1,C2,D1,D2]),
alldifferent([C3,C4,D3,D4]),
% Initialize Puzzle Board
flatten(L, Cells).
%%% Sudoku Possible Values
%% Ensure that the values are either 1-2-3-4
possibleValue(1).
possibleValue(2).
possibleValue(3).
possibleValue(4).
%%% Sudoku Distinct Cell Validation %%%
%% Ensure that values passed in are all different
alldifferent([]).
alldifferent([X|Xs]) :-
different(Xs,X),
alldifferent(Xs).
different([],_).
different([Y|Ys],X) :-
X \= Y,
different(Ys,X).
%%% Sudoku Predicate %%%
go:- L = [ [_,4,2,_], [_,2,1,_], [4,_,_,2], [2,_,_,1] ], solve_sudoku(L). |
Partager