Testul lui Einstein

prolog_logo
Cod Sursa PROLOG

 

% Testul de inteligenta al lui Einstein
% Reguli:
% a.Britanicul locuieste in casa rosie
% b.Suedezul are un caine
% c.Danezul bea ceai
% d.Casa verde se afla in stanga casei albe
% e.Proprietarul casei verzi bea cafea
% f.Persoana care fumeaza Pall Mall are o pasare
% g.Proprietarul casei din mijloc bea lapte
% h.Proprietarul casei galbene fumeaza Dunhill
% i.Norvegianul locuieste in prima casa
% j.Fumatorul de Marlboro locuieste langa cel care are o pisica
% k.Proprietarul care are un cal locuiste langa cel care fumeaza Dunhill
% l.Fumatorul de Winfield bea bere
% m.Norvegianul locuieste langa casa albastra
% n.Germanul fumeaza Rothmans
% o.Fumatorul de Marlboro are un vecin care bea apa
% Cine este proprietarul acvariului cu pesti?
% membru(X,L) – X este in lista L
membru(X,[X|_]).
membru(X,[_|T]) :- membru(X,T).
% dreapta(X,Y,L) : Y se afla in dreapta lui X in lista L
dreapta(L, R, [L | [R | _]]).
dreapta(L, R, [_ | Rest]) :- dreapta(L, R, Rest).
% langa(X,Y,L) : X se afla langa Y in lista L
langa(X, Y, List) :- dreapta(X, Y, List).
langa(X, Y, List) :- dreapta(Y, X, List).
einstein(Case, Prop_Peste) :-
=(Case, [[casa, norvegian, _, _, _, _], _, [casa, _, _, _, lapte, _], _, _]),
membru([casa, britanic, _, _, _, rosu], Case),
membru([casa, suedez, caine, _, _, _], Case),
membru([casa, danez, _, _, ceai, _], Case),
dreapta([casa, _, _, _, _, verde], [casa, _, _, _, _, alb], Case),
membru([casa, _, _, _, cafea, verde], Case),
membru([casa, _, pasare, pallmall, _, _], Case),
membru([casa, _, _, dunhill, _, galben], Case),
langa([casa, _, _, marlboro, _, _], [casa, _, pisica, _, _, _], Case),
langa([casa, _, _, dunhill, _, _], [casa, _, cal, _, _, _], Case),
membru([casa, _, _, winfield, bere, _], Case),
langa([casa, norvegian, _, _, _, _], [casa, _, _, _, _, albastru], Case),
membru([casa, german, _, rothmans, _, _], Case),
langa([casa, _, _, marlboro, _, _], [casa, _, _, _, apa, _], Case),
membru([casa, Prop_Peste, peste, _, _, _], Case).

Interogare:
| ?- einstein(Case,Prop_Peste) .
Case = [[casa,norvegian,pisica,dunhill,apa,galben],
[casa,danez,cal,marlboro,ceai,albastru],
[casa,britanic,pasare,pallmall,lapte,rosu],
[casa,german,peste,rothmans,cafea,verde],
[casa,suedez,caine,winfield,bere,alb]],
Prop_Peste = german ?
Yes

Leave a comment