SEND + MORE = MONEY

Aufgabe:

SEND + MORE = MONEY
Diese Aufgabe hat man mir 1966 als Schüler der Hauptschule Tamsweg gestellt. Das heißt, man kann es ohne Computer ausknobeln.Bei einem Kryptogramm muss man die Buchstaben durch (verschiedene) Ziffern ersetzen.

 

Code:

m muss 1 sein, weil ein größerer Übertrag bei zwei Summanden nicht möglich ist. Da erspart Rechenzeit.

Buchstaben:sort(listify({s,e,n,d,m,o,r,e,m,o,n,e,y}));
m:1;
for d:0 thru 9 do
for e:0 thru 9 do
for n:0 thru 9 do
for o:0 thru 9 do
for r:0 thru 9 do
for s:0 thru 9 do
for y:0 thru 9 do
block(
ev(Buchstaben:[d,e,m,n,o,r,s,y]),
if (1000*s+100*e+10*n+d)
+1000*m+100*o+10*r+e
=10000*m+1000*o+100*n+10*e+y then
if cardinality(setify(Buchstaben))= length(Buchstaben) then
print(Buchstaben,1000*s+100*e+10*n+d,"+",1000*m+100*o+10*r+e,
"=",10000*m+1000*o+100*n+10*e+y)
);

wxMaxima:

smm

[7,5,1,6,0,8,9,2]9567+1085=10652

Achtung: lange Laufzeit!

Die Online-Varianten von Maxima können nicht so lange beansprucht werden.

 

Programm-Block mit geänderter Ausgabe:

block(
ev(Buchstaben:[d,e,m,n,o,r,s,y]),
if (1000*s+100*e+10*n+d)
+1000*m+100*o+10*r+e
=10000*m+1000*o+100*n+10*e+y then
if cardinality(setify(Buchstaben))= length(Buchstaben) then
disp(Buchstaben,"",1000*s+100*e+10*n+d,"+",1000*m+100*o+10*r+e,
"=",10000*m+1000*o+100*n+10*e+y)
);

Android:

send_more_money