SEND + MORE = MONEY

Aufgabe:
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 an die Buchstaben durch (verschiedene) Ziffern ersetzen.

Programmcode:

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)
);

Lösung:

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

Achtung: lange Laufzeit!

Maxima Online: wird erst eingearbeitet

Werbeanzeigen

Ein Kryptogramm lösen

Gegebenes Kryptogramm:

EINS + EINS = ZWEI

Wenn man die Buchstaben durch passende Ziffern ersetzt, erhält man eine richtige Rechnung. Verschiedene Buchstaben müssen verschiedene Ziffern sein.

Quelle: http://de.wikipedia.org/wiki/Kryptogramm

Programmcode:

for e:0 thru 9 do
for i:0 thru 9 do
for n:0 thru 9 do
for s:0 thru 9 do
for w:0 thru 9 do
for z:0 thru 9 do
block(
ev(Buchstaben:[e,i,n,s,w,z]),
if 2*(1000*e+100*i+10*n+s)=1000*z+100*w+10*e+i then
if cardinality(setify(Buchstaben))= length(Buchstaben) then
print(Buchstaben)
);

Man beachte, dass die Verwendung der Mächtigkeit einer Menge (cardinality) hier vorteilhaft verwendet werden konnte,.

Maxima Online: http://maxima-online.org/?inc=r1496736207
mit Ausgabe von EINS und ZWEI: http://maxima-online.org/?inc=r-792513137

Zur Funktionsweise des Programms siehe: https://casmaxima.wordpress.com/2014/04/02/ein-spanisches-online-maxima/