CLP 22 dic 2009
Esercizio 2 (punti 8)
La nonna Luisa, celeberrima preparatrice di torte di uno sperduto paesino italiano, ha appena confezionato uno dei suoi capolavori culinari per la festa parrocchiale del fine settimana. Compiacendosi dell'invitante profumo che sale dal manicaretto, lasciato a raffreddare sulla finestra, la nonna pensa alle sue faccende, ignara che la torta è caduta nel mirino del suo discolo nipote Carletto. In compagnia dei suoi amici Pierino e Tommaso, il monello ha escogitato un piano per impadronirsi dell'appetitoso dolce:
Ogni ragazzo si occuperà di una parte del piano, occorre decidere quale ed anche quando ciascuna azione andrà eseguita, sapendo che:
-
Carletto può intrattenere la nonna facendola parlare per 5 minuti, Pierino per 3 e Tommaso per 2
-
Carletto può distrarre il cane per 4 minuti, Pierino per 2 e Tommaso per 3
-
Carletto può sottrarre la torta in 2 minuti, Pierino in 5 e Tommaso in 4
-
Si può iniziare a distrarre il cane solo da un minuto dopo che la nonna abbia iniziato a parlare e almeno 1 minuto prima che finisca
-
La sottrazione della torta deve terminare mentre il cane è distratto e a non più di 2 minuti da quando la nonna ha smesso di parlare
Si scriva un programma CLP che risolve il problema.
Soluzione
:- lib(fd).
luisa(Lbamb,Ltime,Ldur):-
Lbamb=[BambNonna,BambCane,BambTorta], % Chi esegue l'azione
Ltime=[Tnonna,Tcane,Ttorta], % istante di inizio delle azioni
Ldur=[Dnonna,Dcane,Dtorta], % durata delle azioni
Lbamb :: 1..3, % 1=Carletto, 2=Pierino, 3=Tommaso
Ltime :: 0..10,
element(BambNonna,[5,3,2],Dnonna), % Carletto può intrattenere la nonna per 5 minuti, Pierino per 3 e Tommaso per 2
element(BambCane,[4,2,3],Dcane),
element(BambTorta,[2,5,4],Dtorta),
alldifferent(Lbamb),
% Si può iniziare a distrarre il cane solo da un minuto dopo che la nonna abbia iniziato a parlare
Tcane #>= Tnonna+1,
% e almeno 1 minuto prima che finisca
Tcane #=< Tnonna+Dnonna-1,
% La sottrazione della torta deve essere terminata mentre il cane è distratto
Ttorta+Dtorta #>= Tcane,
Ttorta+Dtorta #=< Tcane + Dcane,
% e a non più di 2 minuti da quando la nonna ha smesso di parlare
Ttorta+Dtorta #=< Tnonna+Dnonna+2,
Tfin #>= Tnonna+Dnonna,
Tfin #>= Tcane+Dcane,
Tfin #>= Ttorta+Dtorta,
labeling(Ltime),
labeling(Lbamb),
labeling(Ldur).