File: incqueens.lp

package info (click to toggle)
gringo 4.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 8,260 kB
  • ctags: 10,755
  • sloc: cpp: 55,049; python: 629; yacc: 569; sh: 124; makefile: 23
file content (23 lines) | stat: -rw-r--r-- 857 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#show queen/2.

#program board(n).
#external attack(n,1..n,h).
#external attack(1..n,n,v).

target(n,  X,  X,  n,  b,n) :- X = 1..n-1.              % diagonal b
target(Y,  n-1,n,  Y-1,b,n) :- Y = 2..n-1.              % diagonal b
target(X,  n-1,X+1,n,  f,n) :- X = 1..n-1.              % diagonal f
target(n-1,Y,  n,  Y+1,f,n) :- Y = 1..n-2.              % diagonal f
target(X,  n,  X-1,n,  h,n) :- X = 2..n.                % horizontal
target(n,  Y,  n-1,Y,  h,n) :- Y = 1..n-1.              % horizontal
target(Y,  X,  Y,  X-1,v,n) :- target(X,Y,X-1,Y,h,n).   % vertical

{ queen(1..n,n); queen(n,1..n-1) }.

attack(X',Y',D) :- target(X,Y,X',Y',D,n), queen(X,Y).
attack(X',Y',D) :- target(X,Y,X',Y',D,n), attack(X,Y,D).

:- target(X,Y,X',Y',D,n), attack(X',Y',D), queen(X',Y').

:- not queen(1,n), not attack(1,n,h).
:- not queen(n,1), not attack(n,1,v).