#はじめに
『Rubyで数独:AIプログラミング入門』の「井桁理論」と「数の予約」の説明で使っている表の記法と解説をまとめる目的でこのノートは書いています。本の中で使っているパズルは数独通信からひっぱってきているので、そのままではあれなので無料で入手可能なOpen Sudokuのパズルに変更しています。
Open SudokuのVERY HARDのステージ53をある程度まで進めた図が次の左の図になります。この状況から先に進むのまず「井桁理論」というテクニックが使えます。その後で、ごにょごにょした後で「数の予約」を使えますが、「数の予約」については別のページで解説します。下の図の大きな数字は確定済みで、小さな数字はとりうる値を意味しております。ただしまだ、何も考慮していないので、初期配置以外のマスには1から9が書き込まれています。
#解説
下の表は3行目のマスを縦軸に、その取りうる値を横軸にとっています。初期配置ですでに値の確定している部分に◯、入らない値については✕を入れます。初期配置の3行目に注目すると、A9からA3が、H8からH3が3にはなりません。つまり下の表の❏の部分は✕が入ります。
表の内容を反映させると、配置は次のようになります。
3行目を見るとB3かI3に3が入ることが分かります。表の言葉で言えば、△か▲の一方に◯が入り、他方に✕が入るということです。次に5行目に注目すると、I8からI5は3にはなりません。つまり、下の表の❏に✕が入ります。
先程と同様にして、5行目のB5かI5に3が入ることが分かります。これを△と▲で表します(前の表と整合性をとるためには白黒が逆ではいけません)。
❏に✕を入れた段階の図は次のようになります。
ここで、B列とI列で同じような表を書いてみると、"・"の位置には✕が入ることが確定していることが分かります。"・"を"✕"にするのを「井桁理論」と呼びます。
"・"を"✕"にしたあとの図は次のようになります。