declare
proc {Send Root}
S E N D M O R Y
in
Root = solution(s:S e:E n:N d:D m:M o:O r:R y:Y)
Root ::: 0#9
{FD.distinct Root}
S \=: 0
M \=: 0
1000*S + 100*E + 10*N + D
+ 1000*M + 100*O + 10*R + E
=: 10000*M + 1000*O + 100*N + 10*E + Y
{FD.distribute ff Root}
end
{ExploreOne Send}
After clicking on the solution node, the Browser shows
1#solution(d: 7 e: 8 m: 0 n: 1 o: 3 r: 6 s: 2 y: 5)
declare
proc {Send Root}
W E I N W E I B L I E B E
in
Root = solution(w:W e:E i:I n:N b:B l:L)
Root ::: 0#9
{FD.distinct Root}
W \=: 0
L \=: 0
1000*W + 100*E + 10*I + N
+ 1000*W + 100*E + 10*I + B
=: 10000*L + 1000*I + 100*E + 10*B + E
{FD.distribute ff Root}
end
{ExploreOne Send}
declare
% ABC + AA = DEF
% : + :
% GF : C = A
% = = =
% FH + DF = IID
% replace division by multiplication
proc {Crypt2D Root}
!Root=sol(A B C D E F G H I)
in
{FD.distinct !Root}
!Root ::: 0#9
%Rows, top to bottom
100*A + 10*B + C + 10*A + A =: 100*D + 10*E + F
A * C =: 10*G + F
10*F + H + 10*D + F =: 100*I + 10*I + D
%Columns, left to right
(10*F + H) * (10*G + F) =: 100*A + 10*B + C
10*A + A + C =: 10*D + F
(100*I + 10*I + D) * A =: 100*D + 10*E + F
{FD.distribute split Root}
end
{ExploreOne Crypt2D}
and get the solution
A=8, B=6, C=4, D=9, E=5, F=2, G=3, H=7, I=1