Ein Kryptogramm lösen

Aufgabe:

Ein gegebenes Kryptogramm soll entschlüsselt werden. Es lautet: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

Code 01:

for e:1 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:1 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,1000*e+100*i+10*n+s,1000*z+100*w+10*e+i)
);
Man beachte, dass die Verwendung der Mächtigkeit einer Menge (cardinality) hier vorteilhaft verwendet werden konnte. Es spart Rechenzeit, wenn die FOR-Schleifen für e und z mit 1 beginnen. Führende Nullen werden ja nicht verwendet. Das folgende Programm ist wegen der Optimierung mit Hilfe der Differenzmenge (setdifference) besonders schnell.

 

Code 02:

ziffern:setify(makelist(i,i,0,9))$
zaehler:0$
disp(["#",EINS,ZWEI])$
for e in setdifference(ziffern,{0}) do
for i in setdifference(ziffern,{e}) do
for n in setdifference(ziffern,{e,i}) do
for s in setdifference(ziffern,{e,i,n}) do
for w in setdifference(ziffern,{e,i,n,s}) do
for z in setdifference(ziffern,{0,e,i,n,s,w}) do
if 2*(1000*e+100*i+10*n+s)=1000*z+100*w+10*e+i then block(
ev(zaehler:zaehler+1),
disp([zaehler,1000*e+100*i+10*n+s,1000*z+100*w+10*e+i])
)$

wxMaxima:

eins_eins_zwei
Ausgabe der verwendeten Ziffern und der entschlüsselten Zahlen

Maxima Online: http://maxima-online.org/?inc=r-792513137

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

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s