% 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).