Loading 3.1_3.pl 0 → 100644 +42 −0 Original line number Diff line number Diff line % nacteni: /* ['3.1_3.pl']. */ :- retractall(solution/1). :- retractall(sol/1). :- retractall(noattack/2). :- retractall(template/1). :- dynamic solution/1, sol/1, noattack/2, template/1. solution(S) :- template(S), sol(S). sol([]). sol([X/Y|Others]) :- sol(Others), member(X,[1,2,3,4,5,6,7,8]), member(Y,[1,2,3,4,5,6,7,8]), noattack(X/Y,Others). noattack(_,[]). noattack(X/Y,[X1/Y1|Others]) :- X=\=X1, Y=\=Y1, Y1-Y=\=X1-X, Y1-Y=\=X-X1, noattack(X/Y,Others). template([_X1/_Y1, _X2/_Y2, _X3/_Y3, _X4/_Y4, _X5/_Y5, _X6/_Y6, _X7/_Y7, _X8/_Y8]). % demonstracni vypis % abychom se vyhli varovanim "Redefined static procedure ..." :- dynamic start/0. start:- write('PROBLEM OSMI DAM I'),nl, write('Zadejte dotaz "solution(Solution)", po vypoctu prvniho reseni'),nl, write('si dalsi vyzadate stisknutim ";".'),nl. ?-start. :- retractall(start/0). 3.1_3.py 0 → 100644 +31 −0 Original line number Diff line number Diff line #!/usr/bin/env python # encoding=utf-8 (pep 0263) from linked_lists import Cons, Nil def solution(n=8): if n == 0: yield Nil else: for others in solution(n-1): for x in range(8): for y in range(8): if noattack(x, y, others): yield Cons((x, y), others) def noattack(x, y, others): if others == Nil: return True else: x1, y1 = others.head return x != x1 and y != y1 and y1-y != x1-x and y1-y != x-x1 and \ noattack(x, y, others.tail) def tisknireseni(reseni): return ["%d/%d" % (x+1, y+1) for (x, y) in reseni] # demonstracni vypis if __name__ == "__main__": print("PROBLEM OSMI DAM I") print("Volani tisknireseni(next(solution())) : %s" % \ tisknireseni(next(solution()))) 3.1_3.py.out 0 → 100644 +2 −0 Original line number Diff line number Diff line PROBLEM OSMI DAM I Volani tisknireseni(next(solution())) : ['8/4', '7/2', '6/7', '5/3', '4/6', '3/8', '2/5', '1/1'] Loading
3.1_3.pl 0 → 100644 +42 −0 Original line number Diff line number Diff line % nacteni: /* ['3.1_3.pl']. */ :- retractall(solution/1). :- retractall(sol/1). :- retractall(noattack/2). :- retractall(template/1). :- dynamic solution/1, sol/1, noattack/2, template/1. solution(S) :- template(S), sol(S). sol([]). sol([X/Y|Others]) :- sol(Others), member(X,[1,2,3,4,5,6,7,8]), member(Y,[1,2,3,4,5,6,7,8]), noattack(X/Y,Others). noattack(_,[]). noattack(X/Y,[X1/Y1|Others]) :- X=\=X1, Y=\=Y1, Y1-Y=\=X1-X, Y1-Y=\=X-X1, noattack(X/Y,Others). template([_X1/_Y1, _X2/_Y2, _X3/_Y3, _X4/_Y4, _X5/_Y5, _X6/_Y6, _X7/_Y7, _X8/_Y8]). % demonstracni vypis % abychom se vyhli varovanim "Redefined static procedure ..." :- dynamic start/0. start:- write('PROBLEM OSMI DAM I'),nl, write('Zadejte dotaz "solution(Solution)", po vypoctu prvniho reseni'),nl, write('si dalsi vyzadate stisknutim ";".'),nl. ?-start. :- retractall(start/0).
3.1_3.py 0 → 100644 +31 −0 Original line number Diff line number Diff line #!/usr/bin/env python # encoding=utf-8 (pep 0263) from linked_lists import Cons, Nil def solution(n=8): if n == 0: yield Nil else: for others in solution(n-1): for x in range(8): for y in range(8): if noattack(x, y, others): yield Cons((x, y), others) def noattack(x, y, others): if others == Nil: return True else: x1, y1 = others.head return x != x1 and y != y1 and y1-y != x1-x and y1-y != x-x1 and \ noattack(x, y, others.tail) def tisknireseni(reseni): return ["%d/%d" % (x+1, y+1) for (x, y) in reseni] # demonstracni vypis if __name__ == "__main__": print("PROBLEM OSMI DAM I") print("Volani tisknireseni(next(solution())) : %s" % \ tisknireseni(next(solution())))
3.1_3.py.out 0 → 100644 +2 −0 Original line number Diff line number Diff line PROBLEM OSMI DAM I Volani tisknireseni(next(solution())) : ['8/4', '7/2', '6/7', '5/3', '4/6', '3/8', '2/5', '1/1']