ゼブラパズルは、5軒の家がそれぞれ違う色で塗られている、有名な論理パズルです。 家にはそれぞれ違う住人が住んでいて、国籍も、飼っているペットも、飲み物も、趣味も異なります。
パズルを解くために、解答を説明する15個の文が与えられます。 ただし、_すべての_文の情報を組み合わせてはじめて、パズルの解答を見つけることができます。
ゼブラパズルは、制約充足問題(CSP)です。 このような問題では、取りうる値の集合と、どの値が有効かを制限する制約の集合があります。 よく知られた制約充足問題としては、ほかにも数独があります。
課題は、ゼブラパズルを解いて、次の2つの問いの答えを見つけることです。
次の15の命題は、すべて真であることがわかっています。
さらに、5軒の家はそれぞれ異なる色に塗られ、住人はそれぞれ異なる国籍で、異なるペットを飼い、異なる飲み物を飲み、異なる趣味を持っています。
解の候補は240億通り(5!⁵ = 24,883,200,000)あります。できるだけ多くの解を排除してみましょう。
これは、あらかじめ書かれたパッケージが含まれる最初の演習です。
ファイルpkgIndex.tclがあることと、auto_path変数に現在のディレクトリが含まれていることに注目してください。
これにより、package requireコマンドがパッケージのソースファイルを見つけられるようになります。
これは、特に良く書かれたパッケージというわけではありません。さまざまなところから借りてきたコードを寄せ集めただけです。
interp aliasの呼び出しは、見苦しい部分を隠して、permutationsパッケージを使いやすくするためのものです。
参考資料: