% Title : Enigme du livre bleu
% Author : Guillaume CABANAC (cabanac@irit.fr)
% Date: 16/12/2004
% On a empilé cinq livres de Mathématiques.
% Les auteurs, les titres, les nombres de pages et les éditeurs sont différents.
% Les couvertures des livres ont des couleurs différentes.
%
% On possède uniquement les renseignements suivants :
%
% 1. le livre de Walter Rudin a 397 pages ;
% 2. le livre jaune est édité par InterEditions ;
% 3. le livre « Groupes finis et leurs représentations » a 142 pages ;
% 4. le livre publié par les éditions Nathan a 213 pages ;
% 5. l'éditeur du livre écrit par Claude Tisseron est Hermann ;
% 6. le livre « Topologie et Espaces fonctionnels » est gris ;
% 7. le livre « Gödel Escher Bach » a 884 pages ;
% 8. le livre d'« Analyse réelle et complexe » est orange ;
% 9. le livre de « Topologie et Espaces fonctionnels » a 319 pages ;
% 10. le livre paru chez Ellipses est au milieu de la pile ;
% 11. le livre paru chez Masson est au bas de la pile ;
% 12. le livre de 319 pages est au sommet de la pile, à côté du livre édité par Nathan;
% 13. le livre de Léonhard Épistemon est à côté du livre « Groupes finis et leurs représentations » ;
% 14. le livre de 397 pages est à côté du livre jaune ;
% 15. le livre de Léonhard est à côté du livre de 319 pages ;
% 16. le livre « Algèbre » est au-dessus du livre « Groupes finis et leurs représentations »;
% 17. le livre écrit par Douglas est à côté du livre orange;
% 18. le livre écrit par Gérard est de couleur rouge.
%
% Question :
% Qui a écrit le livre bleu ?
%livre(1:titre,2:auteur,3:editeur,4:couleur,5:nbpages).
bibli([livre(_,_,_,_,_),
livre(_,_,_,_,_),
livre(_,_,_,_,_),
livre(_,_,_,_,_),
livre(_,_,_,_,_)]).
enigme(Bibli) :-
bibli(Bibli),
member(livre(_,'Walter Rudin',_,_,397),Bibli),
member(livre(_,_,'InterEditions',jaune,_),Bibli),
member(livre('Groupes finis',_,_,_,142),Bibli),
member(livre(_,_,'Nathan',_,213),Bibli),
member(livre(_,'Claude Tisseron','Herman',_,_),Bibli),
member(livre('Topologie des espaces fonctionnels',_,_,gris,_),Bibli),
member(livre('Godel Escher Bach',_,_,_,884),Bibli),
member(livre('Analyse complexe et reelle',_,_,orange,_),Bibli),
member(livre('Topologie des espaces fonctionnels',_,_,_,319),Bibli),
member(livre(_,'Gerard',_,rouge,_),Bibli),
member(livre(_,_,_,bleu,_),Bibli), %le livre bleu existe!
Bibli = [_,_,livre(_,_,'Ellipses',_,_),_,_], %10
Bibli = [_,_,_,_,livre(_,_,'Masson',_,_)], %11
Bibli = [livre(_,_,_,_,319),_,_,_,_], %12a
a-cote(Bibli,livre(_,_,_,_,319),livre(_,_,'Nathan',_,_)), %12b
a-cote(Bibli,livre(_,'Leonard Epistemon',_,_,_),livre('Groupes finis',_,_,_,_)), %13
a-cote(Bibli,livre(_,'Douglas',_,_,_),livre(_,_,_,orange,_)), %17
a-cote(Bibli,livre(_,_,_,_,397),livre(_,_,_,jaune,_)), %14
a-cote(Bibli,livre(_,'Leonard Epistemon',_,_,_),livre(_,_,_,_,319)), %15
au-dessus(Bibli,livre('Algebre',_,_,_,_),livre('Groupes finis',_,_,_,_)). %16
% predicat a-cote
a-cote(Biblio,X,Y) :- append(_,[X,Y|_],Biblio).
a-cote(Biblio,X,Y) :- append(_,[Y,X|_],Biblio).
% predicat au-dessus
au-dessus(Biblio,X,Y) :- append(_,[X|B],Biblio),member(Y,B).
% Qui a écrit le livre bleu ?
enigme(Biblio),member(livre(_,A,_,bleu,_),Biblio).