おばあちゃんは最近、2進数パズルを解くことにすっかり夢中になっています。 少しずつ上達してはいるものの、わりとよく行き詰まってしまいます。 そこで、頼れる孫であるあなたは、どんな2進数パズルでも解ける小さなアプリを作ることにしました。 これがあれば、おばあちゃんに次の一手のヒントを出してあげられます。
バイナリパズルを解くことが課題です。 バイナリパズルには、必ず解が_1つだけ_あります。その解は、次のルールを当てはめると見つかります。
未完成のパズルは、0と1の行として渡されます。わからない値の部分はプレースホルダー(_)になっています。
ここでの目標は、バイナリパズルのルールを定義することです。ルールを定義すると、テストがプレースホルダーの値を割り出せるようになります(その作業を自分で行う必要はありません)。
実装には、Prologの有限領域上の制約論理プログラミング(CLP(FD))を使う必要があります。これは、この種の課題にぴったりです。
すぐに始められるように、スタブファイルでは次のようにしてclpfdライブラリがすでに読み込まれています。
:- use_module(library(clpfd)).