Willkommen auf www.sudokurechner.de.vu

Linkweg: Home / Knobeleien / Rätselhafte Addition / Lösung

Rätselhafte Addition

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:

Prolog-Code
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
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, das es für die beiden anonymen Variablen _ in Zeile 3 jeweils zwei Permutationen gibt, die vom Interpreter beide berücksichtigt werden.