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.
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:
[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: