数独盤面の合法性を確認:行・列・3×3ブロックを検査
数独の盤面は一見正しく見えても、すでに矛盾があり、その後の解答作業が無駄になることがあります。この検証ツールは、途中まで数字が入った9x9盤面を解くことなく確認します。入力済みの各マスについて、行・列・3x3ブロックの一意性ルールに違反していないかを調べ、合法かどうかと、重複した数字の正確な位置を返します。空欄は比較対象にならないため、出題時の盤面、解答途中の状態、ほぼ完成した盤面のいずれにもご利用いただけます。
無料で実行
部分的な盤面を確実な形式で入力します
9行を入力し、各行には必ず9マスを含めてください。数字が入っているマスには1から9を使用し、空欄にはピリオドまたは0を使用します。<code>53..7....</code>のように詰めた行はプレーンテキストから問題をコピーするときに便利です。読みやすくするため、マスの間に空白やカンマを入れることもできます。検証時にはこれらの区切りを取り除いてからマス数を数えますが、ほかの記号の意味を推測することはありません。この厳密な区別により、形式が壊れた入力と、形式は正しいものの数独ルールに反する盤面を分けて扱えます。前者は81マスを確実に特定できず、後者は正しい形を持ちながら一意性ルールのいずれかに違反しています。行数の過不足、行内のマス数の誤り、未対応文字がある場合は入力エラーになります。解けること、ヒントが対称であること、ヒント数が十分であることは前提にしません。入力は現在の盤面だけを表します。
行・列・ブロックの競合結果を読み取ります
標準的な3種類の局所ルールをそれぞれ独立して確認します。入力済みの同じ数字は、横の行、縦の列、3x3ブロックの各範囲に2回以上置けません。空欄は比較から除外されます。すべての数字が3条件を満たす場合、<code>valid</code>はtrueとなり、違反一覧は空です。重複がある場合、各違反には種類、1から始まる範囲番号、重複値、その範囲内で同じ値を持つ全マスが含まれます。行と列の座標も、通常の数独の表し方に合わせて1から始まります。同じ2マスが複数の報告に現れる場合があります。たとえば同じ行かつ左上ブロックに5が2個あれば、両方の制約に違反するため、2件とも示します。出力順は常に一定で、行、列、ブロックの順です。各範囲内では1から9の数字順になります。この決定的な順序により、結果のテスト、比較、保存、表示を安定して行えます。
数独の作業工程で適切に活用します
合法性の検証は限定的な診断であり、問題を解く機能でも、良問であることを証明する機能でもありません。trueという結果が示すのは、現在の数字が同じ行・列・ブロック内の別の入力済み数字と重複していないことだけです。より深い矛盾によって完成できない場合、複数の解がある場合、公開に適さないヒント配置である場合は残ります。そのため、早い段階の安全確認として特に役立ちます。問題編集画面では変更のたびに呼び出し、直ちに生じた誤りを示せます。データ取り込み処理では、破損した盤面や転記ミスを、高コストなソルバーへ送る前に除外できます。学習アプリでは解答を明かさず、学習者の現在の入力だけを確認できます。アルゴリズムは固定された81マスだけを走査し、ネットワーク通信を行わないため、高速かつ再現可能です。ブラウザー版は対話的に利用でき、自動処理では同じ盤面を1リクエスト$0.002でAPIへ送信できます。形式エラーと、正しい形式で<code>valid</code>がfalseの盤面は区別して扱ってください。
活用例
転記ミスを早期に発見
コピーした盤面を保存したりソルバーへ渡したりする前に、重複したヒントがないか確認します。
答えを見せずに適切な案内
問題の解答を公開せず、直ちに競合している行・列・ブロックを特定します。
取り込んだ問題データを検証
形式不正の盤面は入力エラーとして拒否し、形式は正しくても違法な盤面は予測可能な構造で報告します。
よくある質問
合法という結果なら、その数独は解けますか?
いいえ。現在の入力済みマスが行・列・3x3ブロックの一意性に違反していないことだけを示します。解の存在や一意性は検査しません。
空欄はどのように入力しますか?
ピリオドまたは数字の0をご使用ください。どちらも空欄として扱われ、重複検査では無視されます。
マスを空白やカンマで区切れますか?
はい。空白、カンマ、縦線を見やすさのための区切りとして使用できます。区切りを除いた各行は必ず9マスにしてください。
同じ2マスが2件の違反に表示されるのはなぜですか?
同じ行と同じ3x3ブロックに属する場合など、1組の重複が複数のルールを同時に破るためです。影響する範囲を個別に報告します。
APIリクエストの料金はいくらですか?
APIは1リクエストあたり$0.002です。対話型のブラウザー版はローカルで無料実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/game/sudoku-validate-board \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"board":"53..7....\n6..195...\n.98....6.\n8...6...3\n4..8.3..1\n7...2...6\n.6....28.\n...419..5\n....8..79"}'const res = await fetch("https://api.kit.forhosting.com/game/sudoku-validate-board", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"board": "53..7....\n6..195...\n.98....6.\n8...6...3\n4..8.3..1\n7...2...6\n.6....28.\n...419..5\n....8..79"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/game/sudoku-validate-board",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"board": "53..7....\n6..195...\n.98....6.\n8...6...3\n4..8.3..1\n7...2...6\n.6....28.\n...419..5\n....8..79"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/game/sudoku-validate-board", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"board":"53..7....\\n6..195...\\n.98....6.\\n8...6...3\\n4..8.3..1\\n7...2...6\\n.6....28.\\n...419..5\\n....8..79"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"board":"53..7....\n6..195...\n.98....6.\n8...6...3\n4..8.3..1\n7...2...6\n.6....28.\n...419..5\n....8..79"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/game/sudoku-validate-board", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"board": "53..7....\n6..195...\n.98....6.\n8...6...3\n4..8.3..1\n7...2...6\n.6....28.\n...419..5\n....8..79"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.sudoku_validate_board",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |