20 lines
448 B
Prolog
20 lines
448 B
Prolog
safe(Q1X-Q1Y, Q2X-Q2Y) :-
|
|
between(0, 7, Q1Y),
|
|
between(0, 7, Q2Y),
|
|
Q1X =\= Q2X,
|
|
Q1Y =\= Q2Y,
|
|
abs(Q1X - Q2X) =\= abs(Q1Y - Q2Y).
|
|
safe(_, []).
|
|
safe(QN, [Q | QS]) :- safe(QN, [Q | QS], 1).
|
|
safe(_, [], _).
|
|
safe(QN, [Q | QS], QX) :- safe(0-QN, QX-Q), safe(QN, QS, QX + 1).
|
|
|
|
add(Qs, QsN) :-
|
|
QsN = [Q | Qs],
|
|
safe(Q, Qs).
|
|
|
|
add(1, Qs, QsN) :- add(Qs, QsN).
|
|
add(N, Qs, QsN) :- add(Qs, QA), add(M, QA, QsN), succ(M, N).
|
|
|
|
solution(Qs) :- add(8, [], Qs).
|