current implementation (broken)
This commit is contained in:
parent
db96d762ad
commit
5a1e265cae
1 changed files with 66 additions and 0 deletions
66
main.pl
Normal file
66
main.pl
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
% Two = [[0,10,9],[11,_,_],[10,_,_]], puzzle_solution(Two).
|
||||
% Three = [[0,14,10,35],[14,_,_,_],[15,_,_,_],[28,_,1,_]].
|
||||
|
||||
:- use_module(library(clpfd)).
|
||||
:- use_module(library(apply)).
|
||||
|
||||
|
||||
%% puzzle_solution(+Puzzle)
|
||||
%
|
||||
puzzle_solution(Puzzle) :-
|
||||
Puzzle = [_|Rows],
|
||||
% unify_diagonal(Puzzle),
|
||||
maplist(valid_row, Rows),
|
||||
transpose(Puzzle, TransposedPuzzle),
|
||||
TransposedPuzzle = [_|Columns],
|
||||
maplist(valid_row, Columns).
|
||||
|
||||
|
||||
%% valid(+Row)
|
||||
%
|
||||
valid_row([Head|Tail]) :-
|
||||
Tail ins 1..9,
|
||||
all_distinct(Tail),
|
||||
valid_head(Head, Tail).
|
||||
|
||||
|
||||
%% valid_head(+Head, +Tail)
|
||||
%
|
||||
valid_head(Head, List) :-
|
||||
sum(List, #=, Head)
|
||||
; foldl(mul, List, 1, Head).
|
||||
|
||||
%% mul
|
||||
%
|
||||
mul(X, Acc, New) :-
|
||||
New #= Acc * X.
|
||||
|
||||
|
||||
%% unify_diagonal(+Puzzle)
|
||||
%
|
||||
unify_diagonal(Puzzle) :-
|
||||
main_diagonal(Puzzle, [_|Diag]),
|
||||
all_same(Diag).
|
||||
|
||||
|
||||
%% main_diagonal(+Matrix, -Diag)
|
||||
%
|
||||
main_diagonal(Matrix, Diag) :-
|
||||
main_diagonal(Matrix, 0, Diag).
|
||||
|
||||
main_diagonal([], _, []).
|
||||
main_diagonal([M|Ms], I, [D|Ds]) :-
|
||||
nth0(I, M, D),
|
||||
I1 is I + 1,
|
||||
main_diagonal(Ms, I1, Ds).
|
||||
|
||||
|
||||
%% all_same(List)
|
||||
%
|
||||
all_same([Head|Tail]) :-
|
||||
all_same(Head, Tail).
|
||||
|
||||
all_same(Head, [X|Xs]) :-
|
||||
Head = X,
|
||||
all_same(Head, Xs).
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue