Startseite → Knobeleien → Rätselhafte Addition → Lösung
Lösung: Rätselhafte Addition
Lösung
Es gibt nur eine mögliche Lösung für dieses Rätsel:
SEND + MORE ———————— MONEY
steht für:
9567 + 1085 ———————— 10652
Zur Lösungsfindung eignet sich entweder geschicktes Ausprobieren oder aber man bedient sich des Computers. Geeignet dazu ist zum Beispiel die logische Programmiersprache Prolog. Dazu formuliert man die Bedingungen, die in der Aufgabenstellung gestellt sind, in Prolog und lässt den Rechner die Lösung finden:
- addition :-
- % Alle Ziffern sind unterschiedlich
- permutation([D,E,M,N,O,R,S,Y,_,_],[0,1,2,3,4,5,6,7,8,9]),
- % Die ersten Ziffern sind nicht Null
- S \= 0, M \= 0,
- % Die eigentliche Addition muss gelten
- value([S,E,N,D],Send),
- value([M,O,R,E],More),
- value([M,O,N,E,Y],Money),
- Money is Send + More,
- % Ausgabe
- write(Send), write(' + '), write(More),
- write(' = '), write(Money), nl,
- % Weitere Loesungen suchen
- fail.
- % value(List,Value) -- Value ist der Wert von List
- value(List,Value) :- value(List,Value,0).
- value([],Akku,Akku).
- value([Head|Rest],Value,Akku1) :-
- Akku2 is 10*Akku1+Head,
- value(Rest,Value,Akku2).
Der Ablauf des Programms sieht dann unter Verwendung des SWI-Prolog-Interpreters wie folgt aus (Zeilen, die mit ?- beginnen sind Benutzereingaben):
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.6.64) Copyright (c) 1990-2008 University of Amsterdam. SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details. For help, use ?- help(Topic). or ?- apropos(Word). ?- consult(addition). % addition compiled 0.00 sec, 3,640 bytes true. ?- addition. 9567 + 1085 = 10652 9567 + 1085 = 10652 false. ?- halt.
Das Ergebnis wird dabei zweimal ausgegeben, da es für die beiden anonymen Variablen _ in Zeile 3 zwei Permutationen gibt, die vom Interpreter beide berücksichtigt werden.