StartseiteLogikrätselDas HäuserrätselLösung

Lösung: Das Häuserrätsel

Rätsel einblenden

Lösung

Ausblenden

Schritt 1

  1. Das Haus mit dem Pultdach besitzt die Hausnummer 3.
  2. Silke wohnt in dem Haus mit der Hausnummer 1.
  3. In dem Haus mit der Hausnummer 2 wohnt Hans.
Hausnummer 1 3 5 2 4
FrauSilke
MannHans
Zimmer
DachPultdach

Übrig: Barbara, Eva, Heidi, Nathalie, Julian, Luca, Silvio, Torben, 4, 5, 6, 7, 8, Flachdach, Satteldach, Walmdach, Zeltdach

Schritt 2

  1. Die Häuser mit der höchsten und der niedrigsten Zimmeranzahl stehen auf der gleichen Straßenseite.
  2. Barbara und Silvio wohnen gemeinsam in einem Haus, das mehr Zimmer hat als das Haus mit dem Flachdach.
  3. Hans und Nathalie wohnen auf unterschiedlichen Straßenseiten.
  4. Heidi wohnt ein Haus neben Julian.
  5. Das Haus, in dem Heidi wohnt, hat 5 Zimmer.
  6. Das Haus, in dem Julian wohnt, hat weniger als 6 Zimmer.

Mit Hans können offensichtlich weder Barbara noch Nathalie zusammen leben. Julian und Heidi wohnen auf der gleichen Straßenseite und haben 4 bzw. 5 Zimmer. Es wäre ein Widerspruch zur Bedingung 1, wenn sie die Hausnummern 2 und 4 hätten. Damit muss Hans Partnerin Eva sein. Außerdem bleibt damit für die Hausnummer 4 nur Barbara übrig.

Hausnummer 1 3 5 2 4
FrauSilkeEvaBarbara
MannHans
Zimmer
DachPultdach

Übrig: Heidi, Nathalie, Julian, Luca, Silvio, Torben, 4, 5, 6, 7, 8, Flachdach, Satteldach, Walmdach, Zeltdach

Schritt 3

  1. Eva wohnt in einem Haus mit Satteldach.
  2. Barbara und Silvio wohnen gemeinsam in einem Haus, das mehr Zimmer hat als das Haus mit dem Flachdach.
Hausnummer 1 3 5 2 4
FrauSilkeEvaBarbara
MannHansSilvio
Zimmer
DachPultdachSatteldach

Übrig: Heidi, Nathalie, Julian, Luca, Torben, 4, 5, 6, 7, 8, Flachdach, Walmdach, Zeltdach

Schritt 4

  1. Neben Torbens Haus steht ein Haus mit Flachdach.

Ein Flachdach kann aufgrund dieser Bedingung nur eines der Häuser mit den Nummern 1 und 5 haben. Folglich hat Torbens Haus die Nummer 3.

Hausnummer 1 3 5 2 4
FrauSilkeEvaBarbara
MannTorbenHansSilvio
Zimmer
DachPultdachSatteldach

Übrig: Heidi, Nathalie, Julian, Luca, 4, 5, 6, 7, 8, Flachdach, Walmdach, Zeltdach

Schritt 5

  1. Silke ist nicht mit Luca zusammen.
Hausnummer 1 3 5 2 4
FrauSilkeEvaBarbara
MannJulianTorbenLucaHansSilvio
Zimmer
DachPultdachSatteldach

Übrig: Heidi, Nathalie, 4, 5, 6, 7, 8, Flachdach, Walmdach, Zeltdach

Schritt 6

  1. Heidi wohnt ein Haus neben Julian.
  2. Das Haus, in dem Heidi wohnt, hat 5 Zimmer.
Hausnummer 1 3 5 2 4
FrauSilkeHeidiNathalieEvaBarbara
MannJulianTorbenLucaHansSilvio
Zimmer5
DachPultdachSatteldach

Übrig: 4, 6, 7, 8, Flachdach, Walmdach, Zeltdach

Schritt 7

  1. Das Haus, in dem Julian wohnt, hat weniger als 6 Zimmer.

Da die fünf Zimmer bereits vergeben sind, bleiben für Julian nur noch vier Zimmer übrig.

Hausnummer 1 3 5 2 4
FrauSilkeHeidiNathalieEvaBarbara
MannJulianTorbenLucaHansSilvio
Zimmer45
DachPultdachSatteldach

Übrig: 6, 7, 8, Flachdach, Walmdach, Zeltdach

Schritt 8

  1. Die Häuser mit der höchsten und der niedrigsten Zimmeranzahl stehen auf der gleichen Straßenseite.
Hausnummer 1 3 5 2 4
FrauSilkeHeidiNathalieEvaBarbara
MannJulianTorbenLucaHansSilvio
Zimmer458
DachPultdachSatteldach

Übrig: 6, 7, Flachdach, Walmdach, Zeltdach

Schritt 9

  1. Das Haus mit sieben Zimmern hat ein Walmdach.
Hausnummer 1 3 5 2 4
FrauSilkeHeidiNathalieEvaBarbara
MannJulianTorbenLucaHansSilvio
Zimmer45867
DachPultdachSatteldachWalmdach

Übrig: Flachdach, Zeltdach

Ausblenden

Schritt 10

  1. Barbara und Silvio wohnen gemeinsam in einem Haus, das mehr Zimmer hat als das Haus mit dem Flachdach.
Hausnummer 1 3 5 2 4
FrauSilkeHeidiNathalieEvaBarbara
MannJulianTorbenLucaHansSilvio
Zimmer45867
DachFlachdachPultdachZeltdachSatteldachWalmdach

Lösungssuche mit Prolog

Dieses Rätsel lässt sich gut mit Hilfe der logischen Programmiersprache „Prolog“ lösen:

  1. % twoBefore(A, B, L):
  2. % A steht in der Liste L zwei Positionen links von B.
  3. twoBefore(A, B, [A, _, B | _]).
  4. twoBefore(A, B, [_ | R]) :- twoBefore(A, B, R).

  5. % nextTo(A, B, L):
  6. % A und B sind nebeneinander auf der gleichen Strassenseite.
  7. nextTo(A, B, L) :- twoBefore(A, B, L); twoBefore(B, A, L).

  8. % sameSide(A, B, L):
  9. % A und B sind auf der gleichen Strassenseite.
  10. sameSide(A, A, L) :- member(A, L).
  11. sameSide(A, B, L) :- nextTo(A, B, L).
  12. sameSide(A, B, L) :- nextTo(A, C, L), nextTo(C, B, L).

  13. % otherSide(A, B, L):
  14. % A und B stehen auf unterschiedlichen Strassenseiten.
  15. otherSide(A, B, L) :-
  16.   member(A, L),
  17.   member(B, L),
  18.   A = [N1, _, _, _, _],
  19.   B = [N2, _, _, _, _],
  20.   X is N1 mod 2,
  21.   Y is N2 mod 2,
  22.   X \= Y.

  23. % Implementierung des Raetsels
  24. haeuser :-
  25.   % Haeuser in der Strasse.
  26.   Strasse = [Eins, Zwei, Drei, Vier, Fuenf],

  27.   % Hausnummer 1
  28.   Eins = [1, Frau1, Mann1, Zimmer1, Dach1],

  29.   % Hausnummer 2
  30.   Zwei = [2, Frau2, Mann2, Zimmer2, Dach2],

  31.   % Hausnummer 3
  32.   Drei = [3, Frau3, Mann3, Zimmer3, Dach3],

  33.   % Hausnummer 4
  34.   Vier = [4, Frau4, Mann4, Zimmer4, Dach4],

  35.   % Hausnummer 5
  36.   Fuenf = [5, Frau5, Mann5, Zimmer5, Dach5],

  37.   % Definition der moeglichen Zimmeranzahlen
  38.   permutation(
  39.   [Zimmer1, Zimmer2, Zimmer3, Zimmer4, Zimmer5],
  40.   [4, 5, 6, 7, 8]
  41.   ),

  42.   % Die Haeuser mit der hoechsten und der niedrigsten
  43.   % Zimmeranzahl stehen auf der gleichen Strassenseite.
  44.   sameSide([_, _, _, 4, _], [_, _, _, 8, _], Strasse),

  45.   % Eva wohnt in einem Haus mit Satteldach.
  46.   member([_, eva, _, _, satteldach], Strasse),

  47.   % Barbara und Silvio wohnen gemeinsam in einem Haus,
  48.   % das mehr Zimmer hat als das Haus mit dem Flachdach.
  49.   member([_, barbara, silvio, Z1, _], Strasse),
  50.   member([_, _, _, Z2, flachdach], Strasse),
  51.   Z1 > Z2,

  52.   % Das Haus mit dem Pultdach besitzt die Hausnummer 3.
  53.   Dach3 = pultdach,

  54.   % Hans und Nathalie wohnen auf unterschiedlichen Strassenseiten.
  55.   otherSide([_, _, hans, _, _], [_, nathalie, _, _, _], Strasse),

  56.   % Heidi wohnt ein Haus neben Julian.
  57.   nextTo([_, heidi, _, _, _], [_, _, julian, _, _], Strasse),

  58.   % Das Haus mit sieben Zimmern hat ein Walmdach.
  59.   member([_, _, _, 7, walmdach], Strasse),

  60.   % Silke wohnt in dem Haus mit der Hausnummer 1.
  61.   Frau1 = silke,

  62.   % Neben Torbens Haus steht ein Haus mit Flachdach.
  63.   nextTo([_, _, torben, _, _], [_, _, _, _, flachdach], Strasse),

  64.   % Das Haus, in dem Heidi wohnt, hat 5 Zimmer.
  65.   member([_, heidi, _, 5, _], Strasse),

  66.   % Silke ist nicht mit Luca zusammen.
  67.   member([_, silke, M1, _, _], Strasse),
  68.   M1 \= luca,

  69.   % In dem Haus mit der Hausnummer 2 wohnt Hans.
  70.   Mann2 = hans,

  71.   % Das Haus, in dem Julian wohnt, hat weniger als 6 Zimmer.
  72.   member([_, _, julian, Z4, _], Strasse),
  73.   Z4 < 6,

  74.   % Definition der moeglichen Frauen
  75.   permutation(
  76.   [Frau1, Frau2, Frau3, Frau4, Frau5],
  77.   [barbara, eva, heidi, nathalie, silke]
  78.   ),

  79.   % Definition der moeglichen Maenner
  80.   permutation(
  81.   [Mann1, Mann2, Mann3, Mann4, Mann5],
  82.   [hans, julian, luca, silvio, torben]
  83.   ),

  84.   % Definition der moeglichen Daecher
  85.   permutation(
  86.   [Dach1, Dach2, Dach3, Dach4, Dach5],
  87.   [flachdach, pultdach, satteldach, walmdach, zeltdach]
  88.   ),

  89.   % Loesung ausgeben
  90.   write(Strasse),
  91.   write('\n'),

  92.   % Weitere Loesungen suchen
  93.   fail.