Salta ai contenuti. | Salta alla navigazione

Strumenti personali

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:

compito CLP del 22 dic 2009

Ogni ragazzo si occuperà di una parte del piano, occorre decidere quale ed anche quando ciascuna azione andrà eseguita, sapendo che:

  1. Carletto può intrattenere la nonna facendola parlare per 5 minuti, Pierino per 3 e Tommaso per 2

  2. Carletto può distrarre il cane per 4 minuti, Pierino per 2 e Tommaso per 3

  3. Carletto può sottrarre la torta in 2 minuti, Pierino in 5 e Tommaso in 4

  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

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