isLeftTo(X,Y,SX,SY) :- SX = [X,_,_,_,_], SY = [_,Y,_,_,_]; SX = [_,X,_,_,_], SY = [_,_,Y,_,_]; SX = [_,_,X,_,_], SY = [_,_,_,Y,_]; SX = [_,_,_,X,_], SY = [_,_,_,_,Y]. isNextTo(X,Y,SX,SY) :- isLeftTo(X,Y,SX,SY); isLeftTo(Y,X,SY,SX). isTogetherWith(X,Y,SX,SY) :- SX = [X,_,_,_,_], SY = [Y,_,_,_,_]; SX = [_,X,_,_,_], SY = [_,Y,_,_,_]; SX = [_,_,X,_,_], SY = [_,_,Y,_,_]; SX = [_,_,_,X,_], SY = [_,_,_,Y,_]; SX = [_,_,_,_,X], SY = [_,_,_,_,Y]. reseni(B,N,Z,P,K) :- /* 8 Ten, kdo bydli uprostred rady domu, pije mleko. */ P = [_,_,mleko,_,_], /* 9 Nor bydli v prvnim dome. */ N = [nor,_,_,_,_], /* 4 Zeleny dum stoji hned nalevo od bileho. */ isLeftTo(zelena,bila,B,B), /* 1 Brit bydli v cervenem dome. */ isTogetherWith(brit,cervena,N,B), /* 14 Nor bydli vedle modreho domu. */ isNextTo(nor,modra,N,B), /* 2 Sved chova psa. */ isTogetherWith(sved,pes,N,Z), /* 6 Ten, kdo kouri PallMall, chova ptaka. */ isTogetherWith(pallmall,ptak,K,Z), /* 7 Majitel zluteho domu kouri Dunhill. */ isTogetherWith(zluta,dunhill,B,K), /* 10 Ten, kdo kouri Blend, bydli vedle toho, kdo chova kocku. */ isNextTo(blend,kocka,K,Z), /* 11 Ten, kdo chova kone, bydli vedle toho, kdo kouri Dunhill. */ isNextTo(kun,dunhill,Z,K), /* 13 Nemec kouri Prince. */ isTogetherWith(nemec,prince,N,K), /* 5 Majitel zeleneho domu pije kavu. */ isTogetherWith(zelena,kava,B,P), /* 3 Dan pije caj. */ isTogetherWith(dan,caj,N,P), /* 12 Ten, kdo kouri BlueMaster, pije pivo. */ isTogetherWith(bluemaster,pivo,K,P), /* 15 Ten, kdo kouri Blend, ma souseda, ktery pije vodu. */ isNextTo(blend,voda,K,P). rybicky(X) :- reseni(_,N,Z,_,_), isTogetherWith(X,rybicky,N,Z).