Skip to content

Instantly share code, notes, and snippets.

@zdimension
Created August 4, 2022 12:13
Show Gist options
  • Save zdimension/6b7469173cf631e0b3e532cdf865ce26 to your computer and use it in GitHub Desktop.
Save zdimension/6b7469173cf631e0b3e532cdf865ce26 to your computer and use it in GitHub Desktop.
résolution prolog de problèmes de logique du test psychotechnique du CNED édition 1998
adjacent(A, B, List) :- nextto(A, B, List); nextto(B, A, List).
solve(AimeVoile) :-
length(Garcons, 4),
member(garcon(claude, treize, _, _), Garcons), % Claude est âge de treize ans
adjacent(garcon(_, _, tennis, _), garcon(_, _, _, policier), Garcons), % Le joueur de tennis s'entretient avec son voisin qui aime par-dessus tout les romans policiers
member(garcon(_, onze, nage, _), Garcons), % Le garçon de onze ans est un nageur accompli
member(garcon(_, dix, _, aventure), Garcons), % Celui qui préfère les livres d'aventures est âge de dix ans
adjacent(garcon(pierre, douze, _, _), garcon(_, _, tennis, _), Garcons), % Pierre, douze ans, parle avec son voisin qui pratique le tennis
nth1(1, Garcons, garcon(_, _, _, policier)), % Le joueur placé à l'extrême gauche est celui qui préfère les romans policiers
adjacent(garcon(jean, _, _, voyage), garcon(_, _, tennis, _), Garcons), % Jean, qui aime les récits de voyage, se trouve à côté du joueur de tennis
nth1(4, Garcons, garcon(paul, _, _, _)), % Paul joue tout à fait à droite
( % Celui qui s'intéresse aux livres d'histoire s'entretient avec son voisin de gauche à propos de badminton
nextto(garcon(_, _, badminton, _), garcon(_, _, _, histoire), Garcons);
nextto(garcon(_, _, _, _), garcon(_, _, badminton, histoire), Garcons)
),
member(garcon(AimeVoile, _, voile, _), Garcons). % Quel est le nom de celui dont le sport favori est le bateau à voile ?
adjacent(A, B, List) :- nextto(A, B, List); nextto(B, A, List).
:- use_module(library(clpfd)).
solve(Resultat) :-
length(Personnes, 5),
adjacent(pers(architecte, _, _), pers(_, strapontin, _), Personnes), % Un voisin de l'architecte désire un strapontin
nth1(3, Personnes, pers(architecte, _, _)), % Deux personnes précèdent l'architecte dans la file
nth1(5, Personnes, pers(_, _, dim_soir)), % Le dernier de la file désire assister à la séance du dimanche soir
nextto(pers(boulanger, parterre, _), pers(étudiant, _, _), Personnes), % La personne placée devant l'étudiant est boulanger ; il désire un billet pour le parterre
nextto(pers(instituteur, _, _), pers(_, _, ven_soir), Personnes), % La personne qui suit l'instituteur désire une place pour le vendredi soir
nextto(pers(médecin, _, _), pers(architecte, _, _), Personnes), % Le médecin qui précède l'architecte dit à celui-ci : "Vous ne pouvez obtenir qu'une loge pour la représentation du samedi-après-midi"
nextto(pers(_, _, sam_soir), pers(_, _, dim_soir), Personnes), % Celui qui désire voir la séance du samedi soir est placé devant celui uqi désire voir le film le dimanche soir
nextto(pers(_, _, dim_aprem), pers(médecin, _, _), Personnes), % Le médecin dit : "La personne qui me précède désire voir le film le dimanche après-midi"
member(pers(_, loge, sam_aprem), Personnes),
nth1(1, Personnes, pers(_, balcon, _)), % Le premier de la file désire une place au balcon
adjacent(pers(boulanger, _, _), pers(_, _, sam_aprem), Personnes), % Un voisin du boulanger désire se rendre à la représentation du samedi après-midi
nth1(1, Personnes, pers(instituteur, _, _)), % L'instituteur était arrivé le premier au guichet
member(pers(Resultat, X, _), Personnes), % On cherche une personne associée à la place X
var(X). % Où X est une variable libre (i.e. la personne n'a pas de contrainte de place)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment