日別アーカイブ: 2022-02-08

ナンプレ(隠れシングル)


ナンバープレイス
ナンプレ(数独)研究©2022 TacM, Ver0.03

通算記述内容

ナンプレの入り口
解法のあらまし
単一候補検出(single candidate)
隠れシングル(Hidden Singles)
⑤二国同盟(Naked Pairs)

❹隠れシングル(Hidden Singles)

前回は「1~9の数字で8種の数字が既に使われ最後の数字が見つかったときは、それに確定する」という単一候補検出解法を織り込みました。

具体例を左図に示しますが、2行6列2ブロックに関わるRC26の空きマスに適切な数字を埋め込むとき、最後の候補として4が確定します。このような動作について説明しました。

前回、予告として、二国同盟(Naked Pairs)についてまとめるとしましたが、9コマからなる縦・横・ブロックのグループ内だけで解決できる「隠れシングル」が順番として適切であることが判り変更しました。

隠れシングル解法

このサイトのナンプレを語るページにおいて、マスの上部に小さな数字が表示されますが、それは候補数です。最終的にはここに挙げた候補数のどれかに確定します。ナンプレを論理的に扱うには候補数を的確に管理することに他なりません。

隠れシングルとは「特定の行、列、Boxで候補が1つしかない数字は、その数字を確定する」という解法です。隠れシングルが起きるケースは単一候補検出に次いで多く、初級課題はこの2解法で解けるものが多いです。隠れシングルの2例を以下に示します。

上図において、1行目の3, 5, 7, 8, 9マスが空白でそれぞれの候補数が13, 356, 135, 16, 23であるとき、9マスだけ2が候補として挙がっています。この場合、9マスは2が確定します。行・列・ブロックのグループ内で唯一の候補数は隠れシングルとして確定します。行・列・ブロックで重なる場合は、どれか一つを扱って十分です。

空マスが埋まったらすぐに該当する候補数を削除し、次の検索で齟齬が起きないようにします。

上の図は隠れシングルブロックの例であり4ブロックに注目します。空白マスの候補数47, 149, 1489, 149, 278を眺めるとRC61に唯一、2が含まれていることが判り、RC61には2が確定します。

ナンプレ画面の説明

右の出来事欄にはイベントを表示しています。制御プログラムの節目に表示されます。ナンプレの進行速度を極端に落として可視化を図っているので、画面の変化に対応して表示されるイベントメッセージはシステム構築の向上に役立ちます。

絵文字において、✂は削除、💮は確定・よくできました、👌はいいねの意味です。

上の画像をクリックすると画面が大きくなります。

動作例と操作方法

以下に隠れシングル解法を織り込んだHTMLプログラムコードが埋め込まれており、question-NOTHINGが課題として与えられて初期画面が表示されています。

開始ボタンをクリックすれば、Single Candidate-Hidden Singles解法により平易な課題は正解が得られ、赤色縁取り文字で空マスが選ばれた数字で埋め込まれます。

残念ながらすべてのマスを埋め込むことができず「解法が組み込まれていません」とされることがあり、正解を得るには新たな挑戦に委ねられます。

あらかじめ用意された課題はjsファイルで組み込まれますが選択ボタンをクリックして動的に読み込まれるファイルはCSV形式ファイルです。

以下に動作例を示します。さまざまなCSVファイルを準備し選択ボタンをクリックして初級編の課題の回答を表示させましょう。

動作例


できごと欄について

プログラミング中、プログラムコードの動作を監視するとき、console.logにて多くの情報を吐き出し(debug out)ます。そして動作中の情報をログとして記録し動作完了後に確認します。

この方法は手堅いですが動きと並行して見ることができません。これらを改良して動作を見ながら中間情報を確認する方法ができごと欄です。右に用意されたできごと欄の表示容量は小さいですがスクロールされても、はみ出した情報は残るので後で確認することができます。

あとがき

Hidden Singlesはsingle candidate同様、対象マスを取り巻く行・列・ブロック内だけの情報を制御する単純な方式です。難解な課題を解くことはできませんが多くの平易な課題には十分です。次回は9個からなる集団情報を眺めて、その特性を把握して適切な候補に絞る解法(二国同盟)を追加する予定です。

二国同盟(Naked Pairs)

次回、今度こそ!