Nonogram Hub
Nonogram Hub

ノノグラムの作り方

ここでのすべてのパズルは、ありふれた画像として始まり、ロジックだけで解けるグリッドとして完成します。その間に、画像をラスタライズし、結果が実際に解けるかどうかをテストし、解けないものを捨てる自動化されたパイプラインを通ります。このページでは、そのプロセスを正直にたどります——失敗する部分も含めて。なぜなら、作業の大部分は、良いパズルを作ることよりも悪いパズルを排除することにあるからです。

1. 画像から始まる

ノノグラムは常に白黒のシルエットにすぎません——陰影も、色も、内部の細部もありません。そのため最初のステップは、ごく小さな解像度でも形がはっきりと読み取れる元画像を選ぶことです。動物、果物、星座記号、家庭用品など。私たちはベクターアート(SVG)、透過 PNG、そして普通の写真をテーマ別のアセットパックに整理して使用し、さらにアプリ内の画像検索から取り込んだ画像も使います。

この段階で重要なのは、画像がどれだけ美しいかではなく、その輪郭が 15×15 や 20×20 のグリッドに押し縮められてもどれだけ耐えるかです。大胆で、よく分離された形はうまくいきます。小さく重なり合う部分が多くひしめくシーンはほとんどうまくいきません。その理由は以下で見ていきます。

2. 画像をグリッドに変換する

画像は本物の画像処理ライブラリ(ブラウザが SVG のために頼っているものと同じもの)でラスタライズされ、その後、セルごとに1つの黒または白の値に減らされます。それを行う唯一の「正しい」方法はないので、パイプラインはいくつかを試します。画像自体に透明部分がある場合はそれを手がかりにし、単純な明るさ(暗い=塗りつぶし)を手がかりにし、あるいは——明るくカラフルな被写体が無地の背景にあり、明るさだけではほとんど分離できない場合は——背景からの色の距離を手がかりにします。白地に薄いオレンジ色のキツネは明るさではほぼ白ですが、色では大きく異なります。色距離マスクはそれをきれいに切り出します。

「塗りつぶし」と「空」の境界は、Otsu's method を使って自動的に選ばれます。これは、画像を最もきれいに2つのグループに分ける明るさのしきい値を見つける標準的な手法です。どのサイズ、切り抜き、しきい値が最も読み取りやすいかを事前に知る方法はないので、パイプラインは1つの画像につき多数の候補グリッドを生成し——異なるサイズ、異なるしきい値で——それぞれを塗りつぶされた内容に切り抜き、形をグリッドの比率に合わせます。そうすることで、幅広の王冠は正方形に押し込まれる代わりに幅広のグリッドを得られます。

3. 実際に解けるかを確認する

人間には問題なく見える画像でも、自動的に有効なパズルになるわけではありません。本物のノノグラムは、行と列の手がかりだけから解けなければならず、そして——決定的に重要なことに——解が正確に1つでなければなりません。2つの異なる塗りつぶしパターンがすべての手がかりを満たす場合、そのパズルは曖昧で不公平です。純粋なロジックに従って解く人が、正しく「間違った」絵にたどり着いてしまう可能性があるからです。

そこで、すべての候補はソルバーに渡されます。ソルバーは人間が行うのと同じ行ごとの推論を適用し、ロジックだけでは行き詰まる箇所では、完全な解がいくつ存在するかを数えるために網羅的な探索に頼ります。解がゼロ(矛盾)または2つ以上(曖昧)のグリッドは、その場で却下されます。この一意性チェックは、パイプライン全体で最も重要な関門です。

4. 推測ではなくロジックであることを確認する

解が1つあるだけでは十分ではありません。パズルは技術的には一意でも、試行錯誤によってしか到達できないことがあります——セルを埋め、それをグリッドの奥深くまでたどり、矛盾したら戻る。それは解くことではなく推測することであり、フラストレーションのたまるパズルになります。

これを捉えるために、私たちは各パズルがどれだけ推論しにくいかを分類します。素直な行ごとのロジックから導かれるパズルは「シンプル」です。よく研究された第2段階の演繹(Batenburg and Kosters による公表されたノノグラム難易度研究に基づく)が、残りのほとんどを推測なしで処理します。それでも試行錯誤なしには解決できないものは、推測が必要としてフラグが立てられます——そして日常のカタログでは、そうしたものは公開されずに脇へ置かれます。

5. なぜ多くの画像が採用されないのか

解く作業の前に、パイプラインは、画像がそもそも試す価値があるかどうかも、2つの大まかだが正直なシグナルを使って予測します。1つは分離性です。画像がそもそもどれだけきれいに2つの色調に分かれるか——濁った低コントラストの元画像は、どんなサイズでも分が悪い賭けです。もう1つは、細部と解像度の適合です。グリッドのセル数よりもはるかに多くの細かな特徴を持つ画像は、ただの塊に崩れてしまいます。

私たち自身のテストからの具体的な例です。エッフェル塔の実際の写真は、すべての可解性チェックを通過した 40×40 の候補を生み出しました——一意の解、妥当な塗りつぶし比率——が、べた塗りの長方形として描画されました。塔の格子状の細部とその下の雑然としたものが、1つの区別のつかないブロックに平坦化されたのです。技術的には有効なノノグラムですが、視覚的には無意味です。こうしたケースこそ、これらの事前チェックと、人間の目視が食い止めるためにあるものです。限界をはっきりさせておくと、ここにはビジョンモデルはありません——パイプラインは画像の中に*何が*あるかを決して認識せず、その形がどれだけうまく変換されるかを測定するだけです。だからこそ、最終的な判断は今なお人間のものです。

6. 評価、そして最後の人間の目

すべての関門を通過したパズルには、その解法段階と形状統計(グリッドがどれだけ塗りつぶされているか、絵が端からはみ出すかどうかなど)から難易度評価が付与され、それが易しい、普通、難しいのコレクションに振り分けます。次に、人間がカタログ行きのものを私たちのグリッドエディタで開き、絵が本当に想定どおりのものとして読み取れるかを確認し、自動チェックが通してしまったが通すべきでなかったものを調整または破棄します。

これは意図的に地味なプロセスであり、それこそが要点です。自動化は公平性——1つの解、ロジックで解ける——を保証するために存在し、一方で人間は、コンピュータには判断できないもの、すなわち完成した絵が良いものかどうかを見守ります。

これがコードを除いたパイプラインの全体です。それがどのように作られているかを読むより、実際に1つ解いてみたいなら、今日のパズルは始めるのに良い場所です。