数独の解答と生成
変換処理はすべてブラウザ内で完結します。データは送信されません
入力
ファイルをここにドロップすると読み込めます
出力
使い方は三つ:解答・検証・問題の生成です。解答はバックトラックと候補ビットマスクを使い、各手でどの戦略(唯一の候補・隠れた唯一・試し置き)を使ったかを任意で表示します。検証は同じ行・列・ブロックで数字が重複している箇所を具体的に指摘し、解が一つか、複数か、無いかを判定します。生成は完成した解からランダムに穴を掘り、一つ掘るたびに唯一解のままかを検証するので、渡される問題は答えが必ず一つです。 ⚠️ 生成は lib/random.ts の乱数源を使い、Math.random は使いません。シードを入れれば同じ問題を再現できます。 すべてブラウザ内で完結し、接続も送信も行いません。
機能
- 9 行を貼り付けるだけで解答。空欄は . か 0、81 文字の短縮文字列にも対応
- 任意で手順を表示し、各手の戦略も明記
- 検証では重複した数字の行・列・ブロックと具体的なマスを指摘
- 唯一解か、複数解か、解なしかを判定(2 つ数えたら停止し、全列挙はしない)
- 生成は完成解から穴を掘り、毎回唯一解かを検証
- 難易度は 3 段階:簡単/ふつう/難しい
- シードを入れれば同じ問題を再現
- 不正な入力や重複は具体的な行・列を示して報告
- すべてブラウザ内で完結し、データは送信されません
使い方
- モードを選びます:解答/検証/問題の生成
- 解答・検証では 9 行(1 行 9 マス、空欄は . か 0)を貼り付けます
- 生成では難易度を選び、必要ならシードを入れます
- 結果は即座に表示され、各行をコピーできます
よくある質問
- 唯一解かどうかはどう判定しますか?
- バックトラック探索で判定しますが、解を 2 つ見つけた時点で停止します —— 空の盤面には約 6.67×10²¹ 個の解があり、全列挙は何世紀もかかります。「唯一かどうか」には 0・1・2 以上の 3 通りで十分なので、それ以上は数えません。
- 生成した問題が唯一解なのはなぜですか?
- 完成した解からランダムに穴を掘り、一つ掘るたびに上のカウンターで「まだ唯一解か」を検証し、そうでなければそのマスを戻すからです。この手順がないと、「解けそうなのに実は複数の答えがある」問題ができてしまいます。
- 手順に出てくる 3 つの戦略とは?
- 唯一の候補:そのマスに入る数字が一つだけ。隠れた唯一:ある数字がその行・列・ブロックの 1 マスにしか入らない。試し置き(バックトラック):どちらの直接法でも進まないため、数字を仮に置いて進み、行き詰まれば戻します。
- 重複した数字があると解答がエラーになるのはなぜですか?
- 重複のある盤面は解が存在しないからです。そのまま計算しても「解なし」になるだけで、本当の問題は重複したマスにあります。そこで重複している行と列を直接示します。
関連ツール
コイントス
生成一度に 1〜1000 枚のコイントス。表裏の文字は変更でき、1 枚ずつの結果と表裏の回数・割合を表示します。すべてブラウザ内で完結します。
乱数ジェネレーター
生成範囲・個数・小数桁を指定して乱数を生成します。重複の排除、並べ替え、2・8・16 進数での出力にも対応。乱数源は暗号学的乱数です。
数式の計算
Web1 行に 1 式を評価します。優先順位と括弧、べき乗と平方根、三角関数と対数、変数の再利用に対応。eval は使いません。
タイムスタンプ変換
変換Unix タイムスタンプと日時を相互変換。秒〜ナノ秒を桁数で判別し、小数・負数・Windows FILETIME にも対応します。
日付計算
変換2つの日付の差が何日かを計算し、日・週・月の加減算もできます。日付はカレンダーから選ぶか貼り付けで。終了日を空にすると今日と比較。
基数変換
変換2・8・10・16・36・64 進数を相互変換。6 通りの結果を一度に表示し、19 桁のスノーフレーク ID も正確に扱えます。すべてブラウザ内で処理します。