トラック
/
Prolog
Prolog
/
演習
/
バイナリパズル
バイナリパズル

バイナリパズル

中級

はじめに

おばあちゃんは最近、2進数パズルを解くことにすっかり夢中になっています。 少しずつ上達してはいるものの、わりとよく行き詰まってしまいます。 そこで、頼れる孫であるあなたは、どんな2進数パズルでも解ける小さなアプリを作ることにしました。 これがあれば、おばあちゃんに次の一手のヒントを出してあげられます。

説明

バイナリパズルを解くことが課題です。 バイナリパズルには、必ず解が_1つだけ_あります。その解は、次のルールを当てはめると見つかります。

  1. すべてのマスには、0か1のどちらかが入ります。
  2. 同じ数字を3つ以上続けて置くことはできません。つまり、隣り合う2つのマスに同じ数字が入っているとき、その隣のマスにはもう一方の数字が入ります。
  3. 各行と各列には、0と1が同じ数ずつ入ります。
  4. 各行と各列の並びは、すべて異なります。

未完成のパズルは、0と1の行として渡されます。わからない値の部分はプレースホルダー(_)になっています。 ここでの目標は、バイナリパズルのルールを定義することです。ルールを定義すると、テストがプレースホルダーの値を割り出せるようになります(その作業を自分で行う必要はありません)。 実装には、Prologの有限領域上の制約論理プログラミング(CLP(FD))を使う必要があります。これは、この種の課題にぴったりです。

Note

すぐに始められるように、スタブファイルでは次のようにしてclpfdライブラリがすでに読み込まれています。

:- use_module(library(clpfd)).
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Prolog Exercism

バイナリパズルを始める準備はできましたか?

Exercismに登録すれば、109個の演習、そして本物の人間によるメンタリングとともに、Prologを学んでマスターできます。すべて無料です。