Last active
May 30, 2017 21:13
-
-
Save mbauhardt/05d9feca90062c7c0561b8eb3f779b5b to your computer and use it in GitHub Desktop.
Prolog program to solve the Einstein Puzzle (https://en.wikipedia.org/wiki/Zebra_Puzzle)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% 5 hauser neben einander | |
% jedes hat eine andere farbe | |
% in jedem haus woihnt ein andere nationalität | |
% in jedem haus ein anderes getränk | |
% in jedem haus eine andere zigaretten marke | |
% in jedem haus ein anderes haustier | |
% 1 der engländer wohnt im roten haus | |
% 2 der spanier hat einen hund | |
% 3 Kaffee wird im gruenen haus getrunken | |
% 4 der ukrainer trinkt tee | |
% 5 das gruene haus ist direkt rechts neben de weissen haus | |
% 6 der raucher vom altem gold hat schnecken | |
% 7 Kools werden im gelben haus geraucht | |
% 8 milch wird im mittleren haus getrunken | |
% 9 der norweger wohnt im linken haus | |
% 10 der chesterfield raucher wohnt direkt neben dem mann mit dem fuchs | |
% 11 kools wird neben dem haus mit dem pferd geraucht | |
% 12 der lucky strike raucher trinkt orangensaft | |
% 13 der japaner raucht parliament | |
% 14 der norweger wohnt neben dem blauen haus | |
% wer trinkt wasser | |
% wer besitzt das zebra | |
:-print('loese_das_einstein_raetsel eingeben um das Einstein Raetsel zu loesen'),nl,nl. | |
erste(F, [F,_,_,_,_]). | |
mittlere(M, [_, _, M, _, _]). | |
rechts(R, L, [L, R|_]). | |
rechts(R, L, [_|T]) :- rechts(R, L, T). | |
neben(A, B, [A, B|_]). | |
neben(A, B, [B, A|_]). | |
neben(A, B, [_|T]) :- neben(A, B, T). | |
writehaus([]). | |
writehaus([A|T]) :- write(A), nl, writehaus(T). | |
% haus: [farbe, nation, haustier, getraenk, zigarette] | |
loese_das_einstein_raetsel :- | |
% 5 hauser | |
H = [_, _, _, _, _], | |
% der engländer wohnt im roten haus | |
member([rot, englaender, _, _, _], H), | |
% der spanier hat einen hund | |
member([_, spanier, hund, _, _], H), | |
% kaffee wird im gruenen haus getrunken | |
member([gruen, _, _, kaffee, _], H), | |
% der ukrainer trinkt tee | |
member([_, ukrainer, _, tee, _], H), | |
% das gruene haus ist direkt rechts neben de weissen haus | |
rechts([weiss, _, _, _, _], [gruen, _, _, _, _], H), | |
% der raucher vom altem gold hat schnecken | |
member([_, _, schnecke, _, altesgold], H), | |
% Kools werden im gelben haus geraucht | |
member([gelb, _, _, _, kools], H), | |
% milch im mittleren | |
mittlere([_,_,_,milch,_], H), | |
% der norweger wohnt im linken haus | |
erste([_, norweger, _, _, _], H), | |
% chesterfields raucher wohnt direkt neben dem mann mit dem fuchs | |
neben([_, _, _, _, chesterfield], [_, _, fuchs, _, _], H), | |
% kools neben dem haus mit dem pferd | |
neben([_, _, _, _, kools], [_, _, pferd, _, _], H), | |
% lucky strike trinkt orangensaft | |
member([_, _, _, orangensaft, luckies], H), | |
% japaner rucht parliament | |
member([_, japaner, _, _, parliament], H), | |
% der norweger wohnt neben dem blauen haus | |
neben([_, norweger, _, _, _], [blau, _, _, _, _], H), | |
member([_, Wassertrinker, _, wasser, _], H), | |
member([_, Zebrabesitzer, zebra, _, _], H), | |
nl, | |
write('Der '), write(Zebrabesitzer), write(' besitzt das Zebra.'), nl, | |
write('Der '), write(Wassertrinker), write(' trinkt Wasser.'), nl, | |
nl, | |
writehaus(H), | |
nl. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment