:- use_module(library(lists), [nth/4]).

% `nth(?N, ?LIST, ?ELEMENT, ?REST)'
%     ELEMENT is in position N in the LIST and REST is all elements in
%     LIST except ELEMENT.

% satrak(+Leiro, -SatorHelyek): A Leiro által meghatározott sátor-feladvány
% megoldása a SatorHelyek égtájlista.
% ******** Csak egyetlen fát tartalmazó kert esetére működik *********
satrak(satrak(Sorosszegek, Oszloposszegek, [FaS-FaO]), SatorHelyek) :-
	length(Sorosszegek, SorokSzama),
	length(Oszloposszegek, OszlopokSzama),
	szomszed(Egtaj, Sorkulonbseg, Oszlopkulonbseg),
	SatorS is FaS + Sorkulonbseg,
	SatorO is FaO + Oszlopkulonbseg,
	1 =< SatorS, SatorS =< SorokSzama,
	1 =< SatorO, SatorO =< OszlopokSzama,
	nth(SatorS, Sorosszegek, SatorSOssz, TobbiSorOsszeg),
	abs(SatorSOssz) =:= 1,
	nth(SatorO, Oszloposszegek, SatorOOssz, TobbiOszlopOsszeg),
	abs(SatorOOssz) =:= 1,
	csupa_nem_poz(TobbiSorOsszeg),
	csupa_nem_poz(TobbiOszlopOsszeg),
	SatorHelyek = [Egtaj].

% szomszed(Egtaj, Sorkulonbseg, Oszlopkulonbseg): Az Egtajnak megfelelő
% szomszéd sorszáma Sorkulonbseg-gel, oszlopszáma Oszlopkulonbseg-gel nagyobb
% mint az eredeti mező sor- ill. oszlopszáma.
szomszed(n, -1, 0).
szomszed(w, 0, -1).
szomszed(s, 1, 0).
szomszed(e, 0, 1).

% csupa_nem_poz(L): Az L számlista minden eleme nem-pozitív.
csupa_nem_poz([]).
csupa_nem_poz([X|L]) :- X =< 0, csupa_nem_poz(L).

% Futási példa:
%
% | ?- satrak(satrak([0,-1,-1], [0,-1,-1,0], [2-2]), S).
% 
% S = [s] ? ;
% 
% S = [e] ? ;
% 
% no
% | ?- 
