Skip to content

Instantly share code, notes, and snippets.

@noniq
Created January 3, 2013 00:20
Show Gist options
  • Save noniq/4439645 to your computer and use it in GitHub Desktop.
Save noniq/4439645 to your computer and use it in GitHub Desktop.
Nachtbeschäftigung: Logicals in Prolog modellieren/lösen.
% Wer (Vorname) hasst am Inselleben was besonders, und was vermisst er am meisten?
%
% Vornamen: Bernd, Dirk, Jens, Hubert, Sascha, Thomas
% Gehasst werden: Früchte, Rauschen des Meeres, Sand, Schlangen, Skorpione, Wetter
% Vermisst werden: Auto, Bier, Ehefrau, Fernsehen, Kinder, Kumpels.
loesung(Vornamen, Hasst, Vermisst) :-
% 1. Der Mann auf Position 5 vermisst seine Kinder.
nth(5, Vermisst, kinder),
% 3. Der Mann, der sein Feierabendbier vermisst, steht direkt links neben Bernd
% und direkt rechts neben dem Mann, der Angst vor den Schlangen hat.
nth(C1, Vermisst, bier),
nth(C2, Vornamen, bernd),
C1 =:= C2 - 1,
nth(C3, Hasst, schlangen),
C1 =:= C3 + 1,
% 4. Sascha, der seine Kumpels vermisst, steht direkt neben dem Mann, der die
% Früchte der Insel hasst.
nth(D1, Vornamen, sascha),
nth(D1, Vermisst, kumpels),
nth(D2, Hasst, fruechte),
abs(D1 - D2) =:= 1,
% 5. Der Mann auf Position 4 hasst das Rauschen des Meeres.
nth(4, Hasst, rauschen),
% 6. Der Gestrandete, der seine Ehefrau vermisst, steht zwei Positionen weiter
% rechts als der Mann, der den Sand hasst, weil dieser in alle Ritzen kriecht.
nth(F1, Vermisst, ehefrau),
nth(F2, Hasst, sand),
F1 =:= F2 + 2,
% 7. Zwischen Dirk und den Mann, der das Fernsehen vermisst und die Skorpione
% hasst, steht genau ein weiterer Mann.
nth(G1, Vornamen, dirk),
nth(G2, Vermisst, fernsehen),
nth(G2, Hasst, skorpione),
abs(G1 - G2) =:= 2,
% 8. Hubert steht auf Position 3.
nth(3, Vornamen, hubert),
permutation(Vornamen, [bernd, dirk, jens, hubert, sascha, thomas]),
permutation(Hasst, [fruechte, rauschen, sand, schlangen, skorpione, wetter]),
permutation(Vermisst, [auto, bier, ehefrau, fernsehen, kinder, kumpels]),
% 2. Der Gestrandete ganz rechts findet das Wetter der Insel in Ordnung.
\+(nth(6, Hasst, wetter)),
% 9. Jens steht nicht auf Position 2.
\+(nth(2, Vornamen, jens)).
| ?- loesung([A1, A2, A3, A4, A5, A6], [B1, B2, B3, B4, B5, B6], [C1, C2, C3, C4, C5, C6]).
A1 = sascha
A2 = thomas
A3 = hubert
A4 = dirk
A5 = bernd
A6 = jens
B1 = sand
B2 = fruechte
B3 = schlangen
B4 = rauschen
B5 = wetter
B6 = skorpione
C1 = kumpels
C2 = auto
C3 = ehefrau
C4 = bier
C5 = kinder
C6 = fernsehen ? a
(1 ms) no
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment