%% ======================================================== %% Auteur: Jean-Michel Richer %% email: jean-michel.richer@univ-angers.fr %% ======================================================== %% %% Cryptarithme SEND MORE MONEY : %% %% Etant donné des lettre et une expression, on cherche %% a trouver une affectation des lettres par des chiffres %% de manière à ce que le calcul de l'expression soit %% vérifié. Chaque lettre doit se voir affecter une valeur %% différente des autres lettres. %% %% ======================================================== include "globals.mzn"; %% -------------------------- %% Variables %% -------------------------- var 0..9: S; var 0..9: E; var 0..9: N; var 0..9: D; var 1..9: M; var 0..9: O; var 0..9: R; var 0..9: Y; var 0..1 : R1; var 0..1 : R2; var 0..1 : R3; var 0..1 : R4; array[1..8] of var int : all = [S,E,N,D,M,O,R,Y]; %% -------------------------- %% Constraints %% -------------------------- constraint D+E=Y+10*R1; constraint R1+N+R=E+10*R2; constraint R2+E+O=N+10*R3; constraint R3+S+M=O+10*R4; constraint R4=M; constraint all_different(all); %% -------------------------- %% Search %% -------------------------- solve satisfy; %% -------------------------- %% Result %% -------------------------- output[" \(R4) \(R3) \(R2) \(R1)\n"]; output[" \(S) \(E) \(N) \(D)\n"]; output[" \(M) \(O) \(R) \(E)\n"]; output[" \(M) \(O) \(N) \(E) \(Y)\n"]; output[" SENDMORY = \(all)\n"];