/* 2005-11-04 Bengt O.:s matematiska gåta (Seseman): http://www.karlsson.at/newarchive/longerdrafts/arithmetics.htm Man ska placera N personer i ett kloster: A B C D _ E F G H där A+B+C = T A+D+F = T C+E+H = T F+G+H = T och där A+B+C+D+E+F+G+H=Summa I problemet är: T = 9 Summa = {24, 28, 20, 32} För att kompilera till .eco-fil: lib(fcompile). fcompile('seseman.ecl'). */ :- lib(fd). go :- argv(1,RowsumStr), argv(2,TotalStr), argv(3,FirstNumStr), % 0 or 1, empty room or not number_string(Rowsum, RowsumStr), number_string(Total, TotalStr), number_string(FirstNum, FirstNumStr), write(['Rowsum:', Rowsum,'Total',Total]),nl, findall(S, seseman(Rowsum, Total, FirstNum, S), L), (foreach(X, L) do write_convent(X),nl), length(L,Len),nl, write(Len), nl. write_convent([A,B,C,D,E,F,G,H]) :- write([A,B,C]),nl, write([D,'_',E]), nl, write([F,G,H]),nl. seseman(Rowsum, Total, FirstNum, LD) :- LD = [A,B,C,D,E,F,G,H], % deklarera variablerna % FirstNum = 0: empty rooms allowed % FirstNum = 1: empty rooms not allowed LD :: [FirstNum..9], % Radsumma/Kolumnsumma A+B+C #= Rowsum, A+D+F #= Rowsum, C+E+H #= Rowsum, F+G+H #= Rowsum, % summan av alla tal = Total A+B+C+D+E+F+G+H #= Total, labeling(LD).