1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
select([X|Xs],X,Xs).
select([Y|Ys],X,[Y|Zs]) :- select(X,Ys,Zs).
%la procédure de somme de colonne :
somCOL(RAvant, UN, DEUX, RES, Rsuiv) :-
XX is RAvant + UN + DEUX, resRet(XX, RES, Rsuiv).
%---
resRet(XX, XX, 0) :- XX < 10.
resRet(XX, RES, 1) :- XX >= 10, RES is XX -10.
%---
sendMoreMoney :-
select([0,2,3,4,5,6,7,8,9], D, C1), select(C1, E, C2),
somCOL(0, D, E, Y, R1), %pour la col 1 la retenue "d'avant" est 0
select(C2, Y, C3), select(C3, N, C4), select(C4, R, C5),
somCOL(R1, N, R, E, R2),
select(C5, O, C6), somCOL(R2, E, O, N, R3),
select(C6, S, _),
M is 1 , % on sait que M doit être égal à 1
somCOL(R3, S, M, O, M), prettySortie(S, E, N, D, M, O, R, Y),
fail.
%---
prettySortie(S, E, N, D, M, O, R, Y) :-
write(' '), write('SEND'), nl,
write(' + '), write('MORE'), nl,
write('----------'),nl,
write(' '), write('MONEY'), nl,nl,
write(' '), write(S), write(E), write(N), write(D),nl,
write(' + '), write(M), write(O), write(R), write(E),nl,
write('----------'),nl,
write(' '), write(M), write(O), write(N), write(E), write(Y),nl,nl,nl.
%--- |
Partager