二つの盤面モード
本ツールは,数独(ナンプレ)を自力で解く「パズルで遊ぶ(Play)」モードと,任意の問題を入力して答えを導き出す「自分で問題を入力して解析(Solver)」モードの二つの機能を提供しています.タブの切り替えによってこれらのモードは即座に変更可能ですが,モードを切り替える際には進行中の自動探索アニメーションが停止し,盤面が各モードの初期状態へとリセットされる仕様となっています.
Playモードでは,「新規パズル生成」ボタンを押下することで,完成された9×9の数独盤面から特定の数のマスをランダムに空欄にした問題がブラウザ内で即座に生成されます.このモードでは,ユーザー自身がキーパッドやキーボードを用いて空欄を埋め,全マスを正しく埋め尽くすとクリア画面が表示されます.
一方,Solverモードは,新聞や他サイトに掲載されている数独の問題をそのままブラウザ上のグリッドに写し取り,解答を求めるためのモードです.Solverモードの初期状態は全てのマスが空欄(0)となっており,解答したい初期数字を配置していきます.この入力過程において,縦列,横列,あるいは3×3のブロック内で数字の重複が発生した場合,該当するセルが赤くハイライトされ矛盾が警告されます.
この状態では自動解答は実行できません.また,Solverモードで入力したオリジナルパズルをPlayモードへ引き継いで自力で解く機能も備えています.
数字と候補メモ
盤面への入力インターフェースは,マウス操作による画面上のキーパッド入力と,キーボードによる直接入力の双方に対応しています.キーボード操作では,1から9までの数字キーによる値の入力,矢印キーによる選択セルの移動,そして0,Backspace,Deleteキーによるセルのクリアが可能です.また,選択中のセルと同じ数字を再度入力すると,トグル動作によってそのマスが空欄に戻る仕組みを採用しています.
入力方法には「通常入力」と「メモ入力」の二種類が存在します.通常入力モードでは,マスに対して確定した数字を1つだけ配置します.一方,Playモードでのみ利用可能なメモ入力モードでは,1つのマスの中に1から9までの候補数字を複数記録することができます.キーボードの「N」キーを押下するか,画面上のボタンをクリックすることで,この入力モードを素早く切り替えることができます.
メモ入力モード状態では,入力した数字がマスの内部に小さな文字として表示されます.
Playモードですでに初期問題として配置されている固定のセルに対しては,数字の上書きやクリア,メモの追加を行うことはできません.ツールは内部的に,初期盤面の状態を二次元配列として保持し,ユーザーが編集可能な盤面状態とは別に管理しています.これにより,「初期配置に戻す」ボタンによっていつでも元の問題状態へ盤面を復元することが可能となっています.
一括入力の81文字規則
Solverモードにおいて,手動で1マスずつ数字を入力する手間を省くため,テキストのコピーアンドペーストによる盤面の一括取り込み機能を実装しています.この機能は,文字列として表現された数独の問題データを解析し,9×9のグリッドに展開するものです.
一括入力ダイアログに入力されたテキストは,まず改行や空白スペース,カンマなどの区切り文字が正規表現によって除去されます.数独の空欄を表す際によく用いられる「.(ピリオド)」は,内部表現である「0」へと置換されます.その後,先頭から順に文字を評価し,0から9までの数字であればそのまま採用し,それ以外の記号や文字が含まれていた場合はすべて空欄(0)として扱われます.
この処理はテキストの先頭から最大81文字に対して行われます.入力された有効な文字数が81文字に満たない場合,不足しているマスはすべて空欄(0)として末尾まで補完されます.逆に81文字を超える長文が入力された場合,82文字目以降のデータは切り捨てられ,盤面には反映されません.
生成された81個の数字の配列は9マスごとに分割されて再構成され,Solverモードの初期盤面として描画されます.この入力対象文字列の解析と配列変換はブラウザ内で行われます.
バックトラックとステップ
本ツールの自動解答アルゴリズムは,深さ優先探索の一種である「バックトラッキング(後戻り)法」を採用しています.探索プロセスは,盤面の左上のマスから始まり,右下に向かって順番に空欄を探します.空欄を見つけると,そこに1から9までの数字を順番に仮置きし,その数字が縦・横・3×3ブロックの制約に違反していないかをチェックします.
違反がなければ次の空欄へ進み,もしどの数字を入れても制約違反となる(矛盾が生じる)場合は,一つ前に数字を置いたマスまで戻り(バックトラック),別の候補数字を試し直します.この過程を繰り返すことで,最終的に全てのマスが制約を満たす状態で埋まるか,あるいはどの組み合わせでも解が存在しないことを証明します.
ツール画面上に表示される「試行ステップ数」は,このバックトラック法においてマスに数字を仮置きした回数と,矛盾に気づいて数字を空欄に戻した回数の累計をカウントしたものです.したがって,このステップ数は人間の論理的な思考ステップを示すものではなく,アルゴリズムの純粋な計算手数を表しています.
「自動解答」ボタンによる探索アニメーションでは,Generator関数を用いて探索プロセスを一時停止・再開可能な状態で制御し,指定された速度間隔で盤面の変化を視覚化します.一方,「一瞬で解決」を実行した場合は,このGeneratorを介さずに再帰関数を一気に最後まで評価するため,アニメーション描画は省略され,探索が終了した時点で最終的な解答盤面を表示します.
矛盾と解の個数
Solverモードでは,入力された盤面に対してリアルタイムで解析を行い,問題としての成立状況を判定する機能が組み込まれています.この判定は,配置の矛盾チェック,ヒント数の確認,そして解の個数のカウントという3つの段階で構成されています.
まず,ユーザーが数字を入力した時点で,その盤面に明らかな制約違反(同じ行・列・ブロック内での数字の重複)が存在しないかを走査します.重複がある場合は「解析不可」としてエラー状態になります.次に,盤面に入力されている数字の総数(ヒント数)を計算します.数独において一意の解を持つためには最低17個のヒントが必要であるとされているため,ヒント数が17個未満の場合は,解が一意にならない状態として警告メッセージが表示されます.
矛盾がなく,ヒント数が17個以上の場合,ツールは入力変更に応じ,同じブラウザのメイン処理で解の探索を実行します.ここでは通常のバックトラック探索を応用し,解を1つ見つけても終了せず,最大2つまで解の個数をカウントします.カウントの結果が0個であれば「配置エラー(解なし)」,1個であれば「一意の解が存在」,2個に達した時点で探索を打ち切り「複数の解が存在」というステータスを返します.
これにより,自作問題の成立状況を簡易的に検証できます.
生成難度と利用上の限界
Playモードにおけるパズル生成は,難易度設定に応じて初期盤面の空白マスの数を調整する簡便な手法を採用しています.「初級」は40マス,「中級」は48マス,「上級」は54マスの数字を,完成された解答盤面からランダムに非表示にすることで問題を作成します.
この生成手法はブラウザ上で問題を生成できる利点がある一方で,論理的な解きやすさや解の一意性を厳密に保証するものではありません.マスをランダムに削除する仕組みであるため,設定された「上級」の問題であっても偶然ヒントがバランスよく残り簡単に解けてしまう場合や,逆に「初級」であっても解が複数存在してしまい,論理的な絞り込みだけでは正解に辿り着けない配置が生成される限界を含んでいます.
特定の解法テクニックの必須性を評価する機能は実装されていません.
また,本ツールは入力された盤面情報の保存機能や,画像からのOCR読み取り機能,最短ステップでの解答パスを算出する機能を有していません.ブラウザのタブを閉じたりページをリロードしたりすると,入力中の問題データやメモ候補はすべて失われます.探索アルゴリズムは常に左上から1〜9の昇順で深さ優先探索を行うため,問題の配置によっては最悪計算量に陥るケースも存在します.
これらの仕様を理解した上での利用が前提となります.