File: queensn.pl

package info (click to toggle)
gprolog 1.4.5.0-3
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye, sid, trixie
  • size: 7,924 kB
  • sloc: ansic: 55,584; perl: 18,501; sh: 3,401; makefile: 1,114; asm: 20
file content (79 lines) | stat: -rw-r--r-- 721 bytes parent folder | download
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
78
79
% naive queens

queensn(ShowResult) :-
	q10(R),
	(   ShowResult = true ->
	    write(R), nl
	;   true).



q8(R) :-
	q([1,2,3,4,5,6,7,8], R).

q10(R) :-
	q([1,2,3,4,5,6,7,8,9,10], R).


q(L,C):-
	perm(L,P),
	pair(L,P,C),
	safe([],C).




perm([],[]).

perm(Xs,[Z|Zs]):-
	sel(Z,Xs,Ys),
	perm(Ys,Zs).




sel(X,[X|Xs],Xs).

sel(X,[Y|Ys],[Y|Zs]):-
	sel(X,Ys,Zs).




pair([],[],[]).

pair([X|Y],[U|V],[p(X,U)|W]):-
	pair(Y,V,W).




safe(_X,[]).

safe(X,[Q|R]):-
	test(X,Q),
	safe([Q|X],R).




test([],_X).

test([R|S],Q):-
	test(S,Q),
	nd(R,Q).




nd(p(C1,R1),p(C2,R2)):-
	C  is C1-C2,
	R  is R1-R2, C=\=R,
	NR is R2-R1, C=\=NR.

% benchmark interface

benchmark(ShowResult) :-
	queensn(ShowResult).

:- include(common).