9 lines
490 B
Text
9 lines
490 B
Text
fcn isAttacked([(x,y)],a,b) // explode list (x,y) into args x & y
|
|
{ (x==a or y==b or x+y==a+b or x-y==a-b) }
|
|
fcn isSafe(a,b,qs){(not qs.filter1(isAttacked,a,b))} // stop at first attack
|
|
fcn queensN(N=8,row=1,queens=T){ // T is read only list
|
|
qs := [1..N].filter(isSafe.fpM("101",row,queens)) // fpM makes r&q first & third args
|
|
.apply(fcn(c,r,qs){qs+T(r,c)},row,queens);
|
|
if (row == N) return(qs);
|
|
return(qs.apply(self.fcn.fp(N,row+1)).flatten()); // recurse
|
|
}
|