11 lines
538 B
Text
11 lines
538 B
Text
// ( (r,c), x,y ) : is queen at r,c attacked by q@(x,y)?
|
|
fcn isAttacked(q, x,y){ r,c := q; (r==x or c==y or r+c==x+y or r-c==x-y) }
|
|
// queen safe at (r,c)?, qs=( (r,c),(r,c)..) solution so far
|
|
fcn isSafe(r,c,qs){ ( not qs.filter1(isAttacked,r,c) ) }
|
|
fcn queensN(N=8,row=1,queens=T){
|
|
// isSafe(row,?,( (r,c),(r,c).. )
|
|
qs := [1..N].filter(isSafe.fpM("101",row,queens))
|
|
.apply(fcn(c,r,qs){ qs.append(T(r,c)) },row,queens);
|
|
if(row == N) return(qs);
|
|
return(qs.apply( self.fcn.fp(N,row+1) ).flatten());
|
|
}
|