アクレ (Aqre) を、4 つのルールセット内蔵でブラウザに実装した。n×n の盤面のいくつかのマスを黒く塗る。黒マスは全体でひとつながり、数字の書かれた領域はちょうどその数だけ黒マスを含み、どの行・列でも同色 4 連は禁止——連続 4 マスのルールは黒にも白にも効く。だから 4×4 以上では、何も塗っていない盤面が既に違法だ。ソルバー内蔵パズル第 39 弾。
デモ: https://sen.ltd/portfolio/aqre/
リポジトリ: https://github.com/sen-ltd/aqre
このパズルを選んだ理由は 2 つ。
ヒント予算は分割そのものである
前回のぬりみさきは「ヒントの位置を作者が選べない」パズルだった: 丸は完成盤の岬の位置に強制され、作者にできるのは数字を消すことだけ。アクレは正反対の極にいる。ヒントは領域に載り、領域分割は数字を印刷する前に自由に引ける。細かく割れば数字は増え、粗く割れば減る。さらに、答えの色境界に沿って線を引けば全領域が単色(all-or-nothing)になり、数え上げルールだけで盤面が完成する。作者が情報供給を完全に所有する——難易度のラインナップは抽選ではなく設計だ。連作でこの両極(強制されたヒント位置 ⟷ 自由なヒント予算)が隣り合ったので、ダイヤルの効き方を全部測った。
4 連禁止は両色に効く
同色 4 連の禁止は黒専用ではない。どの 1×4 窓も、数字を 1 つも読む前から両方の色に 1 マスずつ借りがある。この対称性が黒密度を帯に固定する: 生成した合法盤面の黒率は 6×6 で中央値 55.6%(範囲 44.4–69.4%)、10×10 で 58.0%(51.0–64.0%)——サイズが伸びても帯はほぼ動かない。ヒントなしの合法盤面(黒ひとつながり + 両色 4 連禁止)の全数は 2×2 で 14、3×3 で 219、4×4 で 798。4×4 は 2^16 = 65,536 通りのうち 798 しか生き残らない——初めて 1×4 窓が存在するサイズで、ルールが空間を 1.2% まで刈り込む。
ルールは 4 段
| レベル | ルール |
|---|---|
quota |
領域の数え上げ、両方向: 数字に達したら残りは白、自由マスが不足分ちょうどなら全部黒。単独では領域境界を一度も越えられない——空盤面から着火できるのは数字 0 か領域サイズちょうどの領域だけ |
quad |
同色 4 連禁止(両色・両軸): 1×4 窓に同色 3 マスが決まれば 4 マス目は逆色 |
bridge |
黒の連結性を局所化する関節点 DFS 1 本: 黒集団から遮断された自由マスは黒になれず(ポケット)、黒同士の唯一の通路は黒確定(ブリッジ) |
probe |
1 マスに色を仮置きし、下位ルールを fixpoint まで回して矛盾したら棄却 |
実測 — 中段が空洞のラダー
300 盤/サイズの生の生成ストリーム(ランダム分割・領域最大 5 マス + ランダム合法盤面 + 全領域に数字)。推測なしの fixpoint だけで完成する率:
| 盤面 | quota | +quad | +bridge | +probe | ストリーム中の一意解率 |
|---|---|---|---|---|---|
| 6×6 | 0.0% | 0.3% | 1.3% | 21.3% | 22.3% |
| 8×8 | 0.0% | 0.0% | 0.0% | 7.7% | 8.3% |
| 10×10 | 0.0% | 0.0% | 0.0% | 0.7% | 1.0% |
異様な表だ。quota 列は全サイズ 0.0%——数字を読む唯一のルールが、ランダム分割の上では単独で 1 盤も完成させられない。領域境界を越えられないからだ。そして 8×8 以上では +quad も +bridge も増分 0.0pt、probe に達した瞬間に一気に跳ねる。連作の兄弟たちのラダーは下から順に積み上がる階段だったが、アクレのラダーは下 3 段でほぼ登れず、最上段だけが働いているように見える。
Ablation — 空洞に見えた中段が、全部急所
では quad と bridge は無駄なのか。全ラダーから 1 ルールずつ抜く:
| 盤面 | full | −quota | −quad | −bridge |
|---|---|---|---|---|
| 6×6 | 21.3% | 0.0% | 0.0% | 1.0% |
| 8×8 | 7.7% | 0.0% | 0.0% | 0.0% |
| 10×10 | 0.7% | 0.0% | 0.0% | 0.0% |
どの 1 ルールを抜いてもほぼ全崩壊。増分 0.0pt だった quad を抜くと、6×6 ですら 21.3% → 0.0%。矛盾しているように見えるが、していない: probe は「仮置きして下位ルールで矛盾を探す」ルールなので、下位ルールは probe が世界を感知するセンサーだ。単独では 1 マスも進めないルールが、probe の内側では矛盾検出器として全荷重を支える。連作の教訓「incremental だけで評価すると冗長なルールが本質的に見える」(クロット)の正確な裏返しで、incremental だけで評価すると本質的なルールが無駄に見える。両方向から測って初めてラダーの形が分かる。
前々回のぬりみさきの ablation は「4 つの別々の定理が全部同時に急所」だった。アクレも冗長性ゼロだが、理由が違う: ぬりみさきは盤面が情報に飢えすぎて予備を持てなかった。アクレの中段はそもそも単独歩行できない設計で、probe という運び手に乗って初めて仕事をする。
2 つのダイヤル — 効かない方と、全域に効く方
作者が回せるダイヤルは 2 つある。数字の保持率(密度)と、分割の粒度だ。まず密度、8×8・各点 150 盤:
| 密度 | 一意 | probe 解決 | bridge 解決 | 平均数字数 |
|---|---|---|---|---|
| 0.00 | 0.0% | 0.0% | 0.0% | 0.0 |
| 0.25 | 0.0% | 0.0% | 0.0% | 6.0 |
| 0.50 | 0.0% | 0.0% | 0.0% | 12.9 |
| 0.75 | 0.0% | 0.0% | 0.0% | 19.3 |
| 1.00 | 8.0% | 7.3% | 0.0% | 26.0 |
密度ダイヤルはほぼ死んでいる。0.75 まで回しても一意率 0.0%、1.00 でようやく 8.0%。数字を 19 個も印刷して 1 盤も決まらない。ところが分割の粒度(領域の最大サイズ)を回すと:
| maxSize | 平均領域数 | 一意 | probe 解決 | quota 単独解決 |
|---|---|---|---|---|
| 1 | 64.0 | 100.0% | 100.0% | 100.0% |
| 2 | 46.0 | 46.0% | 44.7% | 0.0% |
| 3 | 36.4 | 22.0% | 22.0% | 0.0% |
| 5 | 26.3 | 3.3% | 3.3% | 0.0% |
| 8 | 18.8 | 2.0% | 0.7% | 0.0% |
| 12 | 13.6 | 0.7% | 0.0% | 0.0% |
100% から 0.7% まで、一本のダイヤルが全域を掃く。maxSize 1 は全マスが自分の領域に 0/1 の数字を持つ——つまり答えがそのまま印刷されている——ので当然 100% だが、注目は 2 に落とした瞬間 quota 単独が 100% → 0.0% に即死し、一意率も半分になること。兄弟たちの密度スイープが辿った緩やかな坂とは別物の、断崖の連続だ。ぬりみさきには回すダイヤル自体がなかった。アクレのダイヤルは、両端の外まで届く。
Bank — 作者のダイヤルが産む難易度と、産めない難易度
出荷 bank の生成がこの話を実演する。quota 級の盤面はランダム分割からは絶対に出ない(表 1 の 0.0%)が、答えの色境界に沿って単色領域を引けば全数字が 0 か領域サイズになり、quota だけで解ける盤面が任意サイズで作れる——ダイヤルを最弱まで回す操作そのものだ。一方で釣り上げ方式(数千 attempt のランダム分割)では、8×8 以上に quad 級は 0 枚、10×10 には bridge 級も 0 枚。中段の難易度は大盤では存在せず、UI の Rules メニューは産めない難易度をグレーアウトする。ぬりみさきでは下位 2 段が消えた。アクレでは中段だけが消え、最弱と最強が残る——最弱は作者が構成できるから、最強は確率が拾うから。
敵対的に数字を間引いた出荷盤面は、10×10 で領域中央値 57 個中、数字中央値 39 個を残す。一意性証明の探索は 6×6・8×8 で中央値 0 分岐(半数以上の盤面で fixpoint が単独で証明を完結)、10×10 でも中央値 32.5 分岐。
probe = 一意の法則、連作 2 度目の破れ
クロットで初めて破れ、ぬりみさきで全点復活した「probe 解決率 = 一意解率」の法則は、アクレで再び破れた。表 1 の probe 列と一意列の差がそれで、一意なのに probe の fixpoint が完成させられない盤面は 6×6 で 67 盤中 3、8×8 で 25 盤中 2、10×10 で 3 盤中 1。1 マスの仮置きでは見えない、複数マスが同時に組み替わる別解候補を探索だけが潰せる——法則は「成り立つ方が普通だが、保証はない」ものだと連作 39 作目にして確定した。
おまけ — 8 時間ハングした生成器と Las Vegas リスタート
統計の測定中、固定シードの 10×10 盤面生成が 2 プロセスとも 8 時間以上ハングした。生成器はランダム化 DFS(quad + bridge を各ノードで伝播)で、ほとんどの試行は数十ノードで終わるが、最初の運の悪い分岐が天文学的な袋小路に探索を閉じ込める——ランタイムが重い裾を持つ、この種の探索の古典的な病理だ。処方も古典的で、5,000 ノードで打ち切って引き直す Las Vegas リスタートを 1 つ入れるだけ。リスタート発火率は 1% 未満、シードごとの決定性は保たれ、ハングは消えた。
検証
- 解数の突き合わせ: ラダーとコードを共有しない総当たり(行優先 DFS、枝刈りは明文ルールの言い換えのみ、葉は独立バリデータ採点)と、4 レベル各々の伝播付き探索の解数が、完走した全 (盤面, レベル) ペアで一致——534/534。伝播を持たない弱レベル探索は 26 ペアが 30 万分岐の上限に達しスキップ(数え落としではなく計測対象外として報告)。
- 全数アンカー: ヒントなし 2×2 / 3×3 / 4×4 盤を素朴なビットマスク列挙・総当たり・探索エンジンの 3 通りで全列挙——14 / 219 / 798 盤で全エンジン一致。
- Bank の整合性: 出荷全 45 盤は探索エンジンで一意性を再確認済み、grade は「推測なしで完成できる最弱レベル」で付与。
全 38 テスト。npm test で回る。
まとめ
- アクレのヒント予算は領域分割そのもので、作者が完全所有する。粒度ダイヤルは一意率 100% から 0.7% まで全域を掃き、密度ダイヤルはほぼ効かない。
- ラダーは中段が空洞に見える(8×8 で +quad/+bridge 増分 0.0pt)が、ablation ではどれを抜いても全崩壊——単独歩行できないルールが、probe のセンサーとして全荷重を支える。incremental と ablation の両方向から測って初めて見える構造。
- 中段の難易度グレードは大盤では存在しない(8×8 以上に quad 級 0 枚、10×10 に bridge 級 0 枚)。最弱は作者が構成でき、最強は確率が拾う——消えるのは中間だけ。
- probe = 一意の法則は連作 2 度目の破れ。10×10 では一意 3 盤中 1 盤が probe 不能。
- ランダム化 DFS の重い裾で生成器が 8 時間ハング。5,000 ノードの Las Vegas リスタートで解決。
TypeScript + Vite、ランタイム依存なし。コードは全部公開している。
