% MAGICKY STVOREC % % |------------| % | A | B | C | % |------------| % | D | E | F | % |------------| % | G | H | I | % |------------| % % Treba priradit cislice 1 az 9 premennym A...I tak, aby sucet vo vsetkych % troch riadkoch, stlpcpch a v obidvoch diagonalach je rovny 15. %********************************************************************** % RIESENIE 1 %********************************************************************** stvorec1([A,B,C,D,E,F,G,H,I]) :- generuj([A,B,C,D,E,F,G,H,I]), testuj([A,B,C,D,E,F,G,H,I]). generuj([]). generuj([H|T]) :- generuj(T), cislica(H), nie_je_v(H,T). cislica(1). cislica(2). cislica(3). cislica(4). cislica(5). cislica(6). cislica(7). cislica(8). cislica(9). testuj([A,B,C,D,E,F,G,H,I]) :- 15 is A + B + C, 15 is D + E + F, 15 is G + H + I, 15 is A + D + G, 15 is B + E + H, 15 is C + F + I, 15 is C + E + G, 15 is A + E + I. nie_je_v(_, []). nie_je_v(Prvok, [Hlava|Telo]) :- Prvok \= Hlava, nie_je_v(Prvok, Telo). %********************************************************************** % RIESENIE 2 %********************************************************************** stvorec2([A,B,C,D,E,F,G,H,I]) :- gentest(E, []), gentest(A, [E]), gentest(I, [E,A]), 15 is A + E + I, gentest(C, [E,A,I]), gentest(G, [E,A,I,C]), 15 is G + E + C, gentest(B, [E,A,I,C,G]), 15 is A + B + C, gentest(H, [E,A,I,C,G,B]), 15 is B + E + H, 15 is G + H + I, gentest(D, [E,A,I,C,G,B,H]), 15 is A + D + G, gentest(F, [E,A,I,C,G,B,H,D]), 15 is D + E + F, 15 is C + F + I. gentest(D,L) :- cislica(D), nie_je_v(D,L). %********************************************************************** % RIESENIE 3 %********************************************************************** stvorec3([A,B,C,D,E,F,G,H,I]) :- del(E, [1,2,3,4,5,6,7,8,9], R1), del(A, R1, R2), del(I, R2, R3), 15 is A + E + I, del(C, R3, R4), del(G, R4, R5), 15 is G + E + C, del(B, R5, R6), 15 is A + B + C, del(H, R6, R7), 15 is B + E + H, 15 is G + H + I, del(D, R7, R8), 15 is A + D + G, del(F, R8, R9), 15 is D + E + F, 15 is C + F + I. del(A,[A|L],L). del(A,[B|L],[B|L1]):- del(A,L,L1).