Startseite → Logikrätsel → Das Häuserrätsel → Lösung
Lösung: Das Häuserrätsel
Lösung
Schritt 1
- Das Haus mit dem Pultdach besitzt die Hausnummer 3.
- Silke wohnt in dem Haus mit der Hausnummer 1.
- In dem Haus mit der Hausnummer 2 wohnt Hans.
Hausnummer | 1 | 3 | 5 | 2 | 4 | |
---|---|---|---|---|---|---|
Frau | Silke | Heidi | Nathalie | Eva | Barbara | |
Mann | Julian | Torben | Luca | Hans | Silvio | |
Zimmer | 4 | 5 | 8 | 6 | 7 | |
Dach | Flachdach | Pultdach | Zeltdach | Satteldach | Walmdach |
Übrig: Barbara, Eva, Heidi, Nathalie, Julian, Luca, Silvio, Torben, 4, 5, 6, 7, 8, Flachdach, Satteldach, Walmdach, Zeltdach
Schritt 2
- Die Häuser mit der höchsten und der niedrigsten Zimmeranzahl stehen auf der gleichen Straßenseite.
- Barbara und Silvio wohnen gemeinsam in einem Haus, das mehr Zimmer hat als das Haus mit dem Flachdach.
- Hans und Nathalie wohnen auf unterschiedlichen Straßenseiten.
- Heidi wohnt ein Haus neben Julian.
- Das Haus, in dem Heidi wohnt, hat 5 Zimmer.
- 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 | |
---|---|---|---|---|---|---|
Frau | Silke | Heidi | Nathalie | Eva | Barbara | |
Mann | Julian | Torben | Luca | Hans | Silvio | |
Zimmer | 4 | 5 | 8 | 6 | 7 | |
Dach | Flachdach | Pultdach | Zeltdach | Satteldach | Walmdach |
Übrig: Heidi, Nathalie, Julian, Luca, Silvio, Torben, 4, 5, 6, 7, 8, Flachdach, Satteldach, Walmdach, Zeltdach
Schritt 3
- Eva wohnt in einem Haus mit Satteldach.
- Barbara und Silvio wohnen gemeinsam in einem Haus, das mehr Zimmer hat als das Haus mit dem Flachdach.
Hausnummer | 1 | 3 | 5 | 2 | 4 | |
---|---|---|---|---|---|---|
Frau | Silke | Heidi | Nathalie | Eva | Barbara | |
Mann | Julian | Torben | Luca | Hans | Silvio | |
Zimmer | 4 | 5 | 8 | 6 | 7 | |
Dach | Flachdach | Pultdach | Zeltdach | Satteldach | Walmdach |
Übrig: Heidi, Nathalie, Julian, Luca, Torben, 4, 5, 6, 7, 8, Flachdach, Walmdach, Zeltdach
Schritt 4
- 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 | |
---|---|---|---|---|---|---|
Frau | Silke | Heidi | Nathalie | Eva | Barbara | |
Mann | Julian | Torben | Luca | Hans | Silvio | |
Zimmer | 4 | 5 | 8 | 6 | 7 | |
Dach | Flachdach | Pultdach | Zeltdach | Satteldach | Walmdach |
Übrig: Heidi, Nathalie, Julian, Luca, 4, 5, 6, 7, 8, Flachdach, Walmdach, Zeltdach
Schritt 5
- Silke ist nicht mit Luca zusammen.
Hausnummer | 1 | 3 | 5 | 2 | 4 | |
---|---|---|---|---|---|---|
Frau | Silke | Heidi | Nathalie | Eva | Barbara | |
Mann | Julian | Torben | Luca | Hans | Silvio | |
Zimmer | 4 | 5 | 8 | 6 | 7 | |
Dach | Flachdach | Pultdach | Zeltdach | Satteldach | Walmdach |
Übrig: Heidi, Nathalie, 4, 5, 6, 7, 8, Flachdach, Walmdach, Zeltdach
Schritt 6
- Heidi wohnt ein Haus neben Julian.
- Das Haus, in dem Heidi wohnt, hat 5 Zimmer.
Hausnummer | 1 | 3 | 5 | 2 | 4 | |
---|---|---|---|---|---|---|
Frau | Silke | Heidi | Nathalie | Eva | Barbara | |
Mann | Julian | Torben | Luca | Hans | Silvio | |
Zimmer | 4 | 5 | 8 | 6 | 7 | |
Dach | Flachdach | Pultdach | Zeltdach | Satteldach | Walmdach |
Übrig: 4, 6, 7, 8, Flachdach, Walmdach, Zeltdach
Schritt 7
- 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 | |
---|---|---|---|---|---|---|
Frau | Silke | Heidi | Nathalie | Eva | Barbara | |
Mann | Julian | Torben | Luca | Hans | Silvio | |
Zimmer | 4 | 5 | 8 | 6 | 7 | |
Dach | Flachdach | Pultdach | Zeltdach | Satteldach | Walmdach |
Übrig: 6, 7, 8, Flachdach, Walmdach, Zeltdach
Schritt 8
- Die Häuser mit der höchsten und der niedrigsten Zimmeranzahl stehen auf der gleichen Straßenseite.
Hausnummer | 1 | 3 | 5 | 2 | 4 | |
---|---|---|---|---|---|---|
Frau | Silke | Heidi | Nathalie | Eva | Barbara | |
Mann | Julian | Torben | Luca | Hans | Silvio | |
Zimmer | 4 | 5 | 8 | 6 | 7 | |
Dach | Flachdach | Pultdach | Zeltdach | Satteldach | Walmdach |
Übrig: 6, 7, Flachdach, Walmdach, Zeltdach
Schritt 9
- Das Haus mit sieben Zimmern hat ein Walmdach.
Hausnummer | 1 | 3 | 5 | 2 | 4 | |
---|---|---|---|---|---|---|
Frau | Silke | Heidi | Nathalie | Eva | Barbara | |
Mann | Julian | Torben | Luca | Hans | Silvio | |
Zimmer | 4 | 5 | 8 | 6 | 7 | |
Dach | Flachdach | Pultdach | Zeltdach | Satteldach | Walmdach |
Übrig: Flachdach, Zeltdach
Schritt 10
- Barbara und Silvio wohnen gemeinsam in einem Haus, das mehr Zimmer hat als das Haus mit dem Flachdach.
Hausnummer | 1 | 3 | 5 | 2 | 4 | |
---|---|---|---|---|---|---|
Frau | Silke | Heidi | Nathalie | Eva | Barbara | |
Mann | Julian | Torben | Luca | Hans | Silvio | |
Zimmer | 4 | 5 | 8 | 6 | 7 | |
Dach | Flachdach | Pultdach | Zeltdach | Satteldach | Walmdach |
Lösungssuche mit Prolog
Dieses Rätsel lässt sich gut mit Hilfe der logischen Programmiersprache „Prolog“ lösen:
- % twoBefore(A, B, L):
- % A steht in der Liste L zwei Positionen links von B.
- twoBefore(A, B, [A, _, B | _]).
- twoBefore(A, B, [_ | R]) :- twoBefore(A, B, R).
- % nextTo(A, B, L):
- % A und B sind nebeneinander auf der gleichen Strassenseite.
- nextTo(A, B, L) :- twoBefore(A, B, L); twoBefore(B, A, L).
- % sameSide(A, B, L):
- % A und B sind auf der gleichen Strassenseite.
- sameSide(A, A, L) :- member(A, L).
- sameSide(A, B, L) :- nextTo(A, B, L).
- sameSide(A, B, L) :- nextTo(A, C, L), nextTo(C, B, L).
- % otherSide(A, B, L):
- % A und B stehen auf unterschiedlichen Strassenseiten.
- otherSide(A, B, L) :-
- member(A, L),
- member(B, L),
- A = [N1, _, _, _, _],
- B = [N2, _, _, _, _],
- X is N1 mod 2,
- Y is N2 mod 2,
- X \= Y.
- % Implementierung des Raetsels
- haeuser :-
- % Haeuser in der Strasse.
- Strasse = [Eins, Zwei, Drei, Vier, Fuenf],
- % Hausnummer 1
- Eins = [1, Frau1, Mann1, Zimmer1, Dach1],
- % Hausnummer 2
- Zwei = [2, Frau2, Mann2, Zimmer2, Dach2],
- % Hausnummer 3
- Drei = [3, Frau3, Mann3, Zimmer3, Dach3],
- % Hausnummer 4
- Vier = [4, Frau4, Mann4, Zimmer4, Dach4],
- % Hausnummer 5
- Fuenf = [5, Frau5, Mann5, Zimmer5, Dach5],
- % Definition der moeglichen Zimmeranzahlen
- permutation(
- [Zimmer1, Zimmer2, Zimmer3, Zimmer4, Zimmer5],
- [4, 5, 6, 7, 8]
- ),
- % Die Haeuser mit der hoechsten und der niedrigsten
- % Zimmeranzahl stehen auf der gleichen Strassenseite.
- sameSide([_, _, _, 4, _], [_, _, _, 8, _], Strasse),
- % Eva wohnt in einem Haus mit Satteldach.
- member([_, eva, _, _, satteldach], Strasse),
- % Barbara und Silvio wohnen gemeinsam in einem Haus,
- % das mehr Zimmer hat als das Haus mit dem Flachdach.
- member([_, barbara, silvio, Z1, _], Strasse),
- member([_, _, _, Z2, flachdach], Strasse),
- Z1 > Z2,
- % Das Haus mit dem Pultdach besitzt die Hausnummer 3.
- Dach3 = pultdach,
- % Hans und Nathalie wohnen auf unterschiedlichen Strassenseiten.
- otherSide([_, _, hans, _, _], [_, nathalie, _, _, _], Strasse),
- % Heidi wohnt ein Haus neben Julian.
- nextTo([_, heidi, _, _, _], [_, _, julian, _, _], Strasse),
- % Das Haus mit sieben Zimmern hat ein Walmdach.
- member([_, _, _, 7, walmdach], Strasse),
- % Silke wohnt in dem Haus mit der Hausnummer 1.
- Frau1 = silke,
- % Neben Torbens Haus steht ein Haus mit Flachdach.
- nextTo([_, _, torben, _, _], [_, _, _, _, flachdach], Strasse),
- % Das Haus, in dem Heidi wohnt, hat 5 Zimmer.
- member([_, heidi, _, 5, _], Strasse),
- % Silke ist nicht mit Luca zusammen.
- member([_, silke, M1, _, _], Strasse),
- M1 \= luca,
- % In dem Haus mit der Hausnummer 2 wohnt Hans.
- Mann2 = hans,
- % Das Haus, in dem Julian wohnt, hat weniger als 6 Zimmer.
- member([_, _, julian, Z4, _], Strasse),
- Z4 < 6,
- % Definition der moeglichen Frauen
- permutation(
- [Frau1, Frau2, Frau3, Frau4, Frau5],
- [barbara, eva, heidi, nathalie, silke]
- ),
- % Definition der moeglichen Maenner
- permutation(
- [Mann1, Mann2, Mann3, Mann4, Mann5],
- [hans, julian, luca, silvio, torben]
- ),
- % Definition der moeglichen Daecher
- permutation(
- [Dach1, Dach2, Dach3, Dach4, Dach5],
- [flachdach, pultdach, satteldach, walmdach, zeltdach]
- ),
- % Loesung ausgeben
- write(Strasse),
- write('\n'),
- % Weitere Loesungen suchen
- fail.