Skip to content

Instantly share code, notes, and snippets.

@noniq
Created January 3, 2013 16:43
Show Gist options
  • Select an option

  • Save noniq/4444798 to your computer and use it in GitHub Desktop.

Select an option

Save noniq/4444798 to your computer and use it in GitHub Desktop.
% Das Codewort besteht aus 5 Buchstaben.
% (swi-prolog)
letter(a). letter(b). letter(c). letter(d). letter(e). letter(f).
letter(g). letter(h). letter(i). letter(j). letter(k). letter(l).
letter(m). letter(n). letter(o). letter(p). letter(q). letter(r).
letter(s). letter(t). letter(u). letter(v). letter(w). letter(x).
letter(y). letter(z).
code(Xs) :-
Xs = [X1, X2, X3, X4, X5],
letter(X1),
letter(X2),
letter(X3),
letter(X4),
letter(X5),
clue(Xs, [b, i, r, n, e], 2, 1), % BIRNE enthält 2 Buchstaben des Codeworts, davon einen an der richtigen Position.
clue(Xs, [f, a, h, r, t], 2, 1), % FAHRT enthält 2 Buchstaben des Codeworts, davon einen an der richtigen Position.
clue(Xs, [g, r, u, b, e], 3, 0), % GRUBE enthält 3 Buchstaben des Codeworts, keinen an der richtigen Position.
clue(Xs, [d, r, a, n, g], 2, 0), % DRANG enthält 2 Buchstaben des Codeworts, keinen an der richtigen Position.
clue(Xs, [g, o, t, i, k], 2, 0), % GOTIK enthält 2 Buchstaben des Codeworts, keinen an der richtigen Position.
clue(Xs, [k, a, l, i, f], 2, 0), % KALIF enthält 2 Buchstaben des Codeworts, keinen an der richtigen Position.
clue(Xs, [k, u, r, v, e], 2, 0). % KURVE enthält 2 Buchstaben des Codeworts, keinen an der richtigen Position.
clue(Xs, Letters, Anzahl, AnRichtigerPosition) :-
enthaelt(Xs, Letters, Anzahl),
enthaeltAnRichtigerPosition(Xs, Letters, AnRichtigerPosition).
enthaelt(Xs, Letters, Anzahl) :-
intersection(Letters, Xs, Intersection),
length(Intersection, Anzahl).
enthaeltAnRichtigerPosition([X | Xs], [Letter | Letters], Anzahl) :-
X = Letter,
Anzahl1 is Anzahl - 1,
enthaeltAnRichtigerPosition(Xs, Letters, Anzahl1).
enthaeltAnRichtigerPosition([X | Xs], [Letter | Letters], Anzahl) :-
X \= Letter,
enthaeltAnRichtigerPosition(Xs, Letters, Anzahl).
enthaeltAnRichtigerPosition([], [], 0).
?- code(Xs).
Xs = [f, i, g, u, r] ;
false.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment