StartseiteKnobeleienDer TresorLösung

Lösung: Der Tresor

Rätsel einblenden

Lösung

Der Code lautet: 675941283. Denn:

4 - 3 = 1

3 + 4 = 7

2 \,{\cdot}\, 3 = 6

8 - 5 = \frac{9}{3}

Ein möglicher Lösungsweg

A123456789
B123456789
C123456789
D123456789
E123456789
F123456789
G123456789
H123456789
I123456789

Wegen G · I = A können G = 1 und I = 1 ausgeschlossen werden, da sonst zwei Ziffern doppelt vorkommen. A muss sich als Produkt zweier unterschiedlicher Zahlen schreiben lassen. Damit fallen für A alle Primzahlen und alle Quadratzahlen bis einschließlich 9 weg. Außerdem müssen G und I Teiler der Möglichkeiten für A sein. Dadurch kommen für G und I nur die Möglichkeiten 2, 3, und 4 in Frage.

A123456789
B123456789
C123456789
D123456789
E123456789
F123456789
G123456789
H123456789
I123456789

Da I nicht 1 sein kann, muss D wegen H - C = D / I einen Teiler besitzen. Deshalb kommen für D nur die Zahlen 4, 6, 8 und 9 in Frage.

A123456789
B123456789
C123456789
D123456789
E123456789
F123456789
G123456789
H123456789
I123456789

Wegen E - I = F und I + E = B gilt B = F + 2 · I. Wegen I ≥ 2 ist damit B ≥ 5. Außerdem folgt aus diesen Gleichungen wegen I ≥ 2, dass E ≤ 7 und F ≤ 5 sein müssen. Wegen E - I = F ist weiterhin E ≥ 3.

A123456789
B123456789
C123456789
D123456789
E123456789
F123456789
G123456789
H123456789
I123456789

Aus H - C = D / I folgt wegen D / I ≥ 2, dass H ≥ 3 und C ≤ 7 sein müssen.

A123456789
B123456789
C123456789
D123456789
E123456789
F123456789
G123456789
H123456789
I123456789

Angenommen, es wäre I = 4. Dann muss aber D = 8 sein, da D ja durch I teilbar sein muss und keine andere mögliche Zahl durch 4 geteilt werden kann. Dann ist aber wegen G · I = A und G ≥ 2 auch A = 8. Damit würde eine Ziffer doppelt vorkommen. Also ist I ≠ 4.

A123456789
B123456789
C123456789
D123456789
E123456789
F123456789
G123456789
H123456789
I123456789

Angenommen, es wäre G = 4. Dann folgt aus G · I = A, dass A = 8 und I = 2 sein müssen. Für D bleibt wegen H - C = D / I nur die Möglichkeit D = 6 übrig. Damit ist aber H - C = 3, also H = C + 3. Also können H und C nicht beide ungerade sein. Da die geraden Zahlen in diesem Fall aber schon für G, A, I und D gebraucht würden, finden wir in diesem Fall keine Lösung. Also ist G ≠ 4.

A123456789
B123456789
C123456789
D123456789
E123456789
F123456789
G123456789
H123456789
I123456789

Damit können sowohl G als auch I nur 2 oder 3 sein. Also fallen für alle anderen Buchstaben die Möglichkeiten 2 und 3 weg. Außerdem ist G · I = A unabhängig davon, wie wir nun G und I belegen und damit A = 6.

A123456789
B123456789
C123456789
D123456789
E123456789
F123456789
G123456789
H123456789
I123456789

Angenommen, es gilt I = 2. Wegen E - I = F und I + E = B ist dann B um 2 größer als E und E um 2 größer als F. Die einzige Zahlenkombination, die dies erfüllt und jetzt noch möglich ist, ist B = 9, E = 7 und F = 5. Da F ≠ 1 ist, bleibt nur noch C = 1 übrig. Für D und H bleiben nur die Zahlen 4 und 8 übrig. Damit finden wir aber keine Kombination, die H - C = D / I erfüllt. Also ist I ≠ 2 und damit sind I = 3 und G = 2.

A123456789
B123456789
C123456789
D123456789
E123456789
F123456789
G123456789
H123456789
I123456789

Da D wegen H - C = D / I durch I = 3 teilbar sein muss, muss D = 9 sein.

A123456789
B123456789
C123456789
D123456789
E123456789
F123456789
G123456789
H123456789
I123456789

Wegen I + E = B und I = 3 ist B um 3 größer als E. Wegen E - I = F ist E wiederum um 3 größer als F. Die einzige noch mögliche Kombination, die dies erfüllt, ist F = 1, E = 4 und B = 7. Damit bleibt für C nur noch die Möglichkeit C = 5, woraus H = 8 folgt.

Implementierung des Rätsels mit Prolog

Alternativ kann man auch einen Computer mit der Lösungsfindung beauftragen. Dieses Problem mit einer imperativen Programmiersprache (wie etwa C/C++ oder Java) zu lösen, ist zwar prinzipiell möglich, jedoch aufwändig. Einfacher ist es, auf eine logische Programmiersprache auszuweichen: Man füttert den Computer mit den Bedingungen und überlässt es ihm, die Lösung durch Ausprobieren zu finden. Geeignet dazu ist zum Beispiel die Programmiersprache Prolog:

  1. % Gibt die Listenelemente einer Liste aus
  2. writelist([]).
  3. writelist([E|R]) :- write(E), writelist(R).

  4. % Sucht den Code
  5. code :-
  6.   % Alle Ziffern von 1 bis 9 kommen genau einmal vor
  7.   permutation([A,B,C,D,E,F,G,H,I],[1,2,3,4,5,6,7,8,9]),
  8.   % Die vier Bedingungen an den Code
  9.   F is E - I,
  10.   B is I + E,
  11.   A is G * I,
  12.   D is (H-C) * I,
  13.   % Ausgabe
  14.   write('Der Code: '), writelist([A,B,C,D,E,F,G,H,I]), nl,
  15.   % Weitere Loesungen suchen
  16.   fail.

Der Ablauf des Programms sieht dann wie folgt aus (Zeilen, die mit ?- anfangen sind Benutzereingaben):

Ausblenden

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(tresor). % tresor compiled 0.00 sec, 3,408 bytes true. ?- code. Der Code: 675941283 false. ?- halt.