% dcv.3
% a: napoloviny(+S, -T1, -T2).

nap(S,[],[],S).
nap(S,[_],[],S).
nap([H|U],[_,_|T],[H|X],Y):-nap(U,T,X,Y).

napoloviny(Seznam, PrvniPolovina, DruhaPolovina):-nap(Seznam, Seznam, PrvniPolovina, DruhaPolovina).

% b: natretiny(+S, -T1, -T2, -T3).
% oddelime prvni tretinu a zbytek, ktery rozdelime pomoci napoloviny

prvtr(Seznam, [], [], Seznam).
prvtr(Seznam, [_], [], Seznam).
prvtr(Seznam, [_,_], [], Seznam).
prvtr([H|U], [_,_,_|T], [H|X], Y):-prvtr(U,T,X,Y).
prvtr(Seznam, PrvniTretina, Zbytek):-prvtr(Seznam, Seznam, PrvniTretina, Zbytek).

natretiny(Seznam, PrvniTretina, DruhaTretina, TretiTretina):-prvtr(Seznam, PrvniTretina, Zbytek),napoloviny(Zbytek,DruhaTretina,TretiTretina).

% muz(X)
muz(karel).
muz(tomas).
muz(lukas).
muz(david).
muz(pavel).
muz(milan).
muz(simon).
muz(jirka).
muz(quido).
muz(vojta).

% zena(X)
zena(pavla).
zena(verka).
zena(petra).
zena(marta).
zena(klara).
zena(zdena).
zena(hanka).

%c: polovinymuzu(+S,-T1,-T2).

vybermuze([],[]).
vybermuze([H|S], [H|M]):-muz(H),vybermuze(S,M).
vybermuze([H|S], M):-zena(H),vybermuze(S,M).

% rozdeli seznam na poloviny s ignorovanim zen
napm(S,[],[],S).
napm([Zena|S],[Muz|T],[Zena|L1],L2):-zena(Zena),napm(S,[Muz|T],L1,L2).
napm([Muz|S],[Muz|T],[Muz|L1],L2):-napm(S,T,L1,L2).

polovinymuzu(Seznam, PrvniPolovina, DruhaPolovina):-vybermuze(Seznam,JenMuzi),napoloviny(JenMuzi,PrvniPolovinaMuzu,_),napm(Seznam,PrvniPolovinaMuzu,PrvniPolovina,DruhaPolovina).

%d: tretinymuzu(+S,-T1,-T2,-T3).

tretinymuzu(Seznam, PrvniTretina, DruhaTretina, TretiTretina):-vybermuze(Seznam,JenMuzi),natretiny(JenMuzi,PrvniTretinaMuzu,DruhaTretinaMuzu,_),napm(Seznam,PrvniTretinaMuzu,PrvniTretina,Zbytek),napm(Zbytek,DruhaTretinaMuzu,DruhaTretina,TretiTretina).

