:- use_module(library(clpfd)). magique3(C):- length(C,9), C ins 1..9, all_distinct(C), contraintes(C), label(C). contraintes(C):- C = [C11,C12,C13,C21,C22,C23,C31,C32,C33], SL1 #= C11+C12+C13, SL1 #= C21+C22+C23, SL1 #= C31+C32+C33, SL1 #= C11+C21+C31, SL1 #= C12+C22+C32, SL1 #= C13+C23+C33, SL1 #= C11+C22+C33, SL1 #= C13+C22+C31. machine(T,P,L,R) :- L = [E2,E1,C50,C20,C10], R = [R2,R1,R50,R20,R10], RV #= T - P, R2 * 200 + R1 * 100 + R50 * 50 + R20 * 20 + R10*10 #= RV, R2 in 0..E2, R1 in 0..E1, R50 in 0..C50, R20 in 0..C20, R10 in 0..C10, label(R). puzzle([C,R,O,S,S] + [R,O,A,D,S] = [D,A,N,G,E,R] ) :- C in 1..9, R in 1..9, D in 1..9, O in 0..9, S in 0..9, A in 0..9, N in 0..9, E in 0..9, G in 0..9, all_distinct([C,R,D,O,S,A,N,E,G]), C*10000 + R*1000 + O*100 + S*10 +S+ R*10000+ O*1000+ A*100+ D*10+ S #= D*100000+ A*10000+ N*1000+ G*100+ E*10 +R, label([C,R,D,O,S,A,N,E,G]).