Das Zebra-Rätsel ist ein berühmtes Logikrätsel mit fünf Häusern, von denen jedes in einer anderen Farbe gestrichen ist. Die Häuser haben verschiedene Bewohner, die unterschiedliche Nationalitäten haben, unterschiedliche Haustiere besitzen, unterschiedliche Getränke trinken und unterschiedlichen Hobbys nachgehen.
Um das Rätsel zu lösen, bekommst du 15 Aussagen, die die Lösung beschreiben. Nur wenn du die Informationen aus allen Aussagen kombinierst, kannst du die Lösung des Rätsels finden.
Das Zebra-Rätsel ist ein Constraint-Satisfaction-Problem (CSP). Bei einem solchen Problem hast du eine Menge möglicher Werte und eine Menge von Einschränkungen, die festlegen, welche Werte gültig sind. Ein weiteres bekanntes CSP ist Sudoku.
Deine Aufgabe ist es, das Zebrarätsel zu lösen und so die Antworten auf diese beiden Fragen zu finden:
Die folgenden 15 Aussagen gelten alle als wahr:
Außerdem ist jedes der fünf Häuser in einer anderen Farbe gestrichen, und ihre Bewohner haben unterschiedliche Nationalitäten, halten unterschiedliche Haustiere, trinken unterschiedliche Getränke und gehen unterschiedlichen Hobbys nach.
Es gibt 24 Milliarden (5!⁵ = 24,883,200,000) mögliche Lösungen, also versuche, so viele Lösungen wie möglich auszuschließen.
Dies ist die erste Übung, die ein vorgefertigtes Paket enthält.
Beachte, dass die Datei pkgIndex.tcl vorhanden ist und dass das aktuelle Verzeichnis in der Variable auto_path enthalten ist.
Dadurch kann der Befehl package require die Quelldatei des Pakets finden.
Dieses Paket ist nicht besonders gut geschrieben: Es ist einfach Code, der aus verschiedenen Quellen übernommen wurde.
Der Aufruf von interp alias soll die Macken verbergen und das Permutationspaket einfacher benutzbar machen.
Referenzen:
Melde dich bei Exercism an, um Tcl mit 135 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.
Entdecke 8 verschiedene Wege, die Lösung des Zebra-Rätsels aus 24 Milliarden möglichen Lösungen zu finden, darunter das möglichst frühe Verwerfen ungültiger Permutationen, der AC-3-Algorithmus, eine sehr kompakte logikbasierte Lösung und sogar ein genetischer Algorithmus!