%	https://wiskundeolympiade.nl/phocadownload/opgaven/1e-ronde/2019/Opgaven.pdf  
%	  Agatha, Isa en Nick hebben alle drie een ander soort fiets. Eén van hen heeft een elektrische 
%	  fiets, één heeft een racefiets en één heeft een mountainbike. De fietsen hebben elk een andere
%	  kleur: groen, blauw of zwart. De drie eigenaren doen elk twee uitspraken, waarvan er één waar
%	  is en één onwaar is:
%		<ul>
%			<li>Agatha zegt: “Ik heb een elektrische fiets. Isa heeft een blauwe fiets.”
%			</li>
%			<li>Isa zegt: “Ik heb een mountainbike. Nick heeft een elektrische fiets.”
%			</li>
%			<li>Nick zegt: “Ik heb een blauwe fiets. De racefiets is zwart.”
%			</li>
%		</ul>
%		Precies één van de volgende beweringen is met zekerheid waar. Welke?
%		<ol style="list-style-type:upper-alpha;">
%			<li>Agatha heeft een groene fiets.</li>
%			<li>Agatha heeft een mountainbike.</li>
%			<li>Isa heeft een groene fiets.</li>
%			<li>Isa heeft een mountainbike.</li>
%			<li>Nick heeft een elektrische fiets.</li>
%		</ol>
%

% eigen implementatie xor (alleen True als X en Y verschillend zijn: (X,Y)=(True,False) of (X,Y)=(False,True).
% operator \+ is de negatie operator \+ True = False, \+ False = True.
beweringFiets(X,Y):- X,\+Y.
beweringFiets(Y,X):- X,\+Y.

losOp(Fietsen):-
    Kleuren = [groen,zwart,rood],
	member(K1,Kleuren),	
    member(K2,Kleuren),
    K1\=K2,				%  K1 is niet gelijk aan K2 want we willen verschillende kleuren
    member(K3,Kleuren),
    K2\=K3,
    K3\=K1,
    Typen   = [racefiets,mountainbike,elektrisch],
	member(T1,Typen),
    member(T2,Typen),
	T1\=T2,				%  T1 is niet gelijk aan T2 want we willen verschillende fietsen
    member(T3,Typen),
	T2\=T3,
    T3\=T1,
 	Fietsen = [fiets(agaat,T1,K1 ),fiets(isa,T2,K2 ),fiets(nick,T3,K3 )],
    beweringFiets(
        member(fiets(nick,_,blauw),Fietsen ),
        member(fiets(_,racefiets,zwart),Fietsen )), %uitspraken Nick
    beweringFiets(
        member(fiets(nick,elektrisch,_),Fietsen ),
        member(fiets(isa,mountainbike,_),Fietsen )),%uitspraken Isa 
	beweringFiets(
        member(fiets(agaat,elektrisch, _ ),Fietsen ),
        member(fiets(isa,_,blauw),Fietsen )) 		%uitspraken Agaat 
 .		% De oplossing

/** <examples>
?- findall(Fietsen,losOp(Fietsen),R),length(R,L).
*/
