RosettaCodeData/Task/N-queens-problem/Zkl/n-queens-problem-1.zkl
2017-09-25 22:28:19 +02:00

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
}