Download
plan(Start,End,Plan):-
generate_plan(Start,End,Plan),
df_plan(Plan).
generate_plan(Start,End,[Start,End]).
generate_plan(Start,End,[Start|Plan]):-
generate_plan(_,End,Plan).
df_plan([_]).
df_plan([X,Y|Plan]):-
pour(X,Y),
df_plan([Y|Plan]).
pour(A-B-C,A1-B1-C):-
A>0,B<5,
B1 is min(5,B+A),
A1 is A-(B1-B).
pour(A-B-C,A1-B-C1):-
A>0,C<3,
C1 is min(3,C+A),
A1 is A-(C1-C).
pour(A-B-C,A1-0-C):-
B>0,
A1 is A+B.
pour(A-B-C,A-B1-C1):-
B>0,C<3,
C1 is min(3,C+B),
B1 is B-(C1-C).
pour(A-B-C,A1-B-0):-
C>0,
A1 is A+C.
pour(A-B-C,A-B1-C1):-
C>0,
B1 is min(5,B+C),
C1 is C-(B1-B).