お絵かきロジック
お絵かきロジック(おえかきロジック)は、縦と横の数字をヒントに塗り潰すマス目を割り出し、そのとおりに塗り潰していくと、最終的に絵(または文字)が浮かび上がるタイプのペンシルパズル。ののぐらむ(ノノグラム)、イラストロジック(イラロジ)、ピクロスとも呼ばれている。
お絵かきロジックは、1988年に西尾徹也といしだのんの二者が独自に発案した。同時期に別々に発表したため一時期論争を起こしたが、実際は殆ど同じ時期に別々に創案したということが分かり、論争もおさまった。
西尾は、マトリクス(表組み)を使用したロジックパズルのマトリクスを利用して絵を描くことを考えた。一般的なロジックパズルにおいてはマトリクスには条件にあてはまるかで○か×を埋めるが、この○と×を黒マスと白マスにすることを考え、ヒントの出し方を考えて現在のルールを完成させた。
いしだは1987年に、ビルの窓を利用して絵を描くという企画で入選した後、窓の絵=格子の上に絵を描くパズルを考えた。このいしだの思考の過程の一部は彼女の著書である「ののぐらむ」で見ることができる。
このように二者が独自の過程を経て偶然にも同じ形式の問題に落ち着いた。後に西尾は問題を提供している『パズラー』誌で、いしだはパズルの連載をしていた『社会新報』紙で問題を発表することになるが、偶然にも両誌の発行日は共に1988年7月2日であった。
西尾は『パズラー』誌でこのパズルを発表した際に、このパズルを読者からも募集した。これにより高い人気を得、同誌から多くの作家が生まれることになった。一方いしだの作品は、イギリスの『サンデー・テレグラフ』(The Sunday Telegraph)紙で連載されることになった際に、同紙よりNONOGRAMと命名され、これにより、NONOGRAMはイギリスで人気を得ることになる。日本においては毎日新聞の日曜版でもののぐらむと命名されて、連載されていた(2006年現在、連載終了)。
1993年に世界文化社から『パズラー』別冊として単行本『お絵かきロジック vol.1』を発売し、20万部を売り上げる。これに便乗した類似本が何冊も出版されるようになるなど、お絵かきロジックの人気の火付け役となったと言われる。なお、お絵かきロジックの名称は世界文化社の登録商標となっており、同名のパズル誌が刊行されている。
1994年10月には、日本文芸社が専門誌である『イラストロジック』誌を創刊し、学習研究社も1995年4月になって専門誌を創刊した。
1995年3月14日には任天堂が「ピクロス」(ピクチャー・クロスワードの略)の名を用いたゲームソフト『マリオのピクロス』(ゲームボーイ用)を発売、以降シリーズ化されている(詳しくは「ピクロス (ゲームソフト)」を参照)。また、同年9月8日には『パズラー』が監修したサン電子のゲームソフト『おーちゃんのお絵かきロジック』(PlayStation用)が発売されるなど追随する流れとなり、以降、家庭用ゲーム機などデジタル機器向けのコンテンツとして定着している。
1個の数字は連続して黒く塗り潰すマス目(以下黒マスという)の数を表している。但し、場所までは表していない。
(例)
に対しては、次の3通りの可能性が考えられる。
数字が複数ある場合、それぞれが連続で黒マスの数を表し、間には必ず塗り潰さないマス(以下白マスという)が最低1つ入る。但し、白マスの場所と、間に幾つ入るかまでは表していない。
(例1)
に対しては、次の6通りが考えられる。
(例2)
に対しては、次の1通りしか考えられない。
複数の異なる数字がある場合は、その順番が黒マスの順番を表している。
(例)
に対しては、正解はそれぞれこのようになる。
なお、横の場合のみを示したが、縦の場合も同じである。
(例)
に対しては、次の3通りが考えられる。
基本的なルールはこれだけである。
(参照チュートリアル:)
ここでは、1列に10マスあるパズルを解くことを想定している。また、スペース節約のため横の列の場合のみを示すが、縦の場合も解き方は同じで、ここの総ての文章を、「左」を「上」に、「右」を「下」に読み替えれば縦の場合の解き方になる。
第1段階では、解き始めで何も手掛りがない状態なので、手掛り無しでも黒マスか白マスか判る所から確定していく。ここでの作業を漏らすと、途中で行き詰まるので、確実にやっておかなくてはならない。
先ず初めに行うのは、0と最高値(ここでは10)から処理するということである。何も考えなくても0の列は全部白マスであり、最高値の列は全部黒マスであることが明らかなためである。
白マスであることが確定したマスには、下のように印(よく使われるのは×)を付けておくとよい。ただ、あまり大きな印をつけると、出来上がった時に絵が見辛くなるので要注意である。
複数の数字がある列で、数字と数字の間に白マスが1つと仮定して計算すると、ちょうど最高値と同じ数になる列は、1通りの可能性しかないので数字と数字の間に1マスだけ白マスを入れて塗り潰す。
(例)
は、7と2の間には白マスが1マスしかないと仮定すると、7+1+2=10(1は白マスの分、以下同じ)で最高値と同じ値になるから、次の1通りしかない。
この処理ができることは数字が細かくなればなるほど気づきにくいので、注意が必要である。例えば次のようなもの。
は、4+1+2+1+2=10だから、
である。もっと細かい場合もある。
は、1+1+2+1+1+1+1+1+1=10だから、
である。
例えば、次の列はどう処理するか。
この列には次の3通りが考えられる。
この場合はどうしようも無いかというと、そうでもない。よく見ると、どの場合も真ん中の6マスは必ず塗られていることがわかる。従って、この列はこの様に一部が確定する。
もっと言えば、一番左のマスが黒マスだと仮定した場合と、一番右のマスが黒マスだと仮定した場合で、共通する黒マスは確定する。
(例)
これを、一番左が黒マスだと仮定すると、
逆に一番右が黒マスだと仮定すると、
2つを比べて、共通して黒マスになっているのは、
となり、黄色で示した中央の2つが共通するので、次の通りマスが確定する。
複数の数字がある場合についても、数字と数字の間の白マスを1マスと仮定すれば同じ事ができる。但し、左と右から塗った場合を比べた時に、黒マスで共通していても、別の数字に由来する場合は共通とは言わない(下の例を参照)。
(例)
一番左が黒マスと仮定して、
一番右が黒マスと仮定して、
2つを比べると、共通して黒マスになっているのは、
ここで、黄色のマスは同じ「4」で塗られているが、緑のマスは一番左から塗った場合は「2」、一番右から塗った場合は「4」で塗られているので、黄色のマスのみ確定である。従って次のように確定する。
下図のような場合の可能性を考慮すると緑色のマスは確定されないことがわかる。
第1段階で確定出来るのはここまでである。後は第1段階で確定したマスを手掛りに、更に確定したマスを増やしていく作業に移る。第2段階で確定したマスも、新たに確定したマスを増やす手掛りになるので、解き終わるまでここの作業を繰り返すことになる。なお、これ以降は、既に確定している黒マスは茶色のマスで、既に確定している白マスは茶色の×で、新たに確定した黒マスと白マスはそれぞれ黒マスと黒い×で表すことにする。
数字の合計と既に確定した黒マスの数が一致する場合、まだ確定していないマスは全て白マスに確定する。また、まだ確定していないマスと黒マスに確定したマスの合計が数字の合計に一致した場合は、まだ確定していないマスは黒マスに確定する。
(例1)
この場合、数字「1」に対して既に1つの黒マスが確定しているので、これ以外の黒マスは存在しない。従って、
と白マスが確定する。
(例2)
この場合、この列には合計4マスの黒マスがあるのだから、まだ確定していないマスが黒マスでないと、黒マスの数が足りなくなってしまう。従って
と黒マスが確定する。
数字と数字の間には白マスが1マス以上入るので、黒マスの連続が留まっていることがわかれば、その両隣は白マスに確定である。
(例1)
この場合、すでに塗られている黒マスは「2」に由来して連続していることは明らかである。数字と数字の間は必ず1つ以上の白マスがあるので、
と白マスが確定する。
(例2)
(例1)の場合と似ているが、今度は既に確定しているマスは「1」に由来するものか「2」に由来するものか、この時点では明らかでないので、新たに確定できるマスはない。
一番外側が確定すると、外側の数字の表す黒マスは確定である。
(例1)
のように一番左が確定している場合、自動的に「3」が表しているのは
と確定する。前項で述べた「黒マスの両隣を留める処理」により、左から4番目に×をつけることも留意する必要がある。
(例2)
と、一番右が確定している場合は、自動的に「2」が表しているのは、
と確定する。右から3つめの×は「黒マスの両隣を留める処理」によるものである。
連続して取れるマスが数字より少ない場合は、その部分は白マスだと確定する。
(例1)
は、右端から黒マスをとると2マスしか取れないので、右端には黒マスは入らない。従って
と確定する。
(例2)
は、×と×の間には2マスしか取れないので、そこには黒マスは入らない。従って
と確定する。
既に黒マスが確定しており、数字と見比べて届かないマスがある場合は、そこは白マスに確定する。また、幾ら端に寄せても黒マスがはみ出す部分については黒マスに確定である。
(例1)
この場合、可能性は次の2通りしかない。
従って、次の様に確定する。
(例2)
この場合、右端から黒マスを取ったとしても、必ず右から5マス目に黒マスが届いてしまう。また、確定しているマスから左へ5マス取ったとしても、左から3マス目まで黒マスは届かないことが明らかである。従って
と確定する。
(例3)
この場合、右側の黒マスから左側に目一杯4マス分伸ばしたとしても、2つの黒マスは繋がらない。また、その間にはルールにより最低1つの白マスが必要なので、左から4マス目は4のマスとしては埋められない。となれば、4の左端が右にずれるので(左から5マス目)、そこから右に数えた4マス目が黒マスに確定する。
外側の白マスが連続して確定すると、その分だけ端が内側に寄ったものと見なす事が出来、それに伴ってその列の最高値がそれだけ少なくなったと見なせる。そこで、更新された端や最高値を使って黒マスと白マスを確定する。
(例1)
これは、第1段階では確定できなかった。しかし、
と確定した場合、右端が1つ分内側にずれたものと見なす事が出来、右から2つめのマスを新しい右端と考えて「左右に詰めた時に生じる共通の黒マスの処理」を行うと、
と確定できる。
(例2)
これは、第1段階では確定できなかった。しかし、
と確定すると、この列は最高値が10から7に下がったと見なせる。すると、1+1+1+1+1+1+1=7となり、最高値と一致するので、
と確定する。
長い空きマスの中ほどが白マスと確定すると、その左右をそれぞれ独立して処理することができる。
(例)
これは、第1段階では確定できなかった。しかし、
と確定した場合、確定した白マスの左右いずれか一方にすべての黒マスが入ることはあり得ないので、左右それぞれに1つずつ入ることになり、
と確定できる。
問題の中には上記の技術を駆使しても解けない場合もある。
解決法の一つとして、仮置き(または、仮定法、背理法)がある。これは、確定していない特定のマスが黒マスであると仮定し、塗り進める中で矛盾が発生するかどうかを確かめるという手法のことである。
(例)
左上のマスが黒マスであると仮定する。
縦列・横列の2に沿って塗り進めていくと、1の横列に2つの黒マスが入ることになり矛盾する。
よって、左上のマスは×であることがわかる。
なお、仮置きしないと解けない問題は、すなわち論理的に解けない問題であることを意味するため採用を避ける向きもある。ジュピターが発売するゲームソフト『ピクロスe』シリーズでは、全て論理的に解ける問題で仮置きを必要としないということをあらかじめ告知している。
基本ルールでは白黒の絵しか描けないため、複数の色を使用できるようにしたルールも存在する。
最も一般的なものは、数字ごとに色が指定されていて、数字に指定された色で塗る物である。この場合、同じ列に数字が複数あっても違う色なら間に空白が入らなくともよいというルールが追加される(同色なら基本ルール同様1マス以上あける)。
解く際には以下の点に注意する必要がある。
数字と数字の間に空白が入らない場合があるので、確定するマスが少なくなる。
各色がどの列で使用されているかを確認する。これにより、その色で塗られない範囲が分かり、そこから決まる場合がある。
ただドット絵を描いても、必ずしも問題として成立するとは限らない。答えが1つに絞れない場合があるためである。コンピュータ上で問題作成ができるソフト等では、問題として成立するかどうかを自動的に判定してくれる機能がついているものもある。
塗りつぶすマスを、正方形を斜めに切った三角形にしたルールも存在する。このようなものをダイヤモンドロジックあるいはダイヤロジックなどと呼ぶ。
100×100マスなど膨大なマス数になってくると、塗れるマスを探すことが非常に手間になってくる。
ここで、第1段階で塗れるマスを計算によって求める方法がある。以下、行Aのヒントが「1,1,3,4」の場合を例に解説する。
まず、黒マスの合計値を求める。すなわち、行Aのヒントに出ている数をすべて足し合わせる(例の場合は、1+1+3+4=9)。
次に、行Aのヒントの個数から1引いた数(黒マスの間に入る白マスの合計の最低値)を足す(例の場合は、9+(4-1)=12)。
最後に、塗れるかどうか知りたい黒マスの数Bをさらに足し合わせる。まずは、行Aのヒントのうち最大の数がよい(例の場合は「4」を調べるとすると、12+4=16)。
これで求めた数から行Aのマス数を引いて出た数が、ヒントBについて第1段階の方法により塗れるマスの数である。0以下になった場合は、行Aの数Bは第1段階では塗ることができない。塗る位置は第1段階の解き方を参照。
例の場合、行Aが15マスのときは「4」の部分が1マス、14マスのときは「3」の1マスと「4」の2マスの計3マスが塗れることが判明する。
以上をもとに、より簡単に解く方法を、上の例で行Aが15マスの場合で説明する。
まずは仮に、左詰めで黒マスの間に白マスを1つ入れながら埋めていく。
このとき、右に余る白マス(上記の黄色の部分)の数n(例の場合は3)を基準に以下のとおりに処理していく。
まず、n以下の数の黒マスは実際には未確定の部分であるので、すべて白マスに変える。
次に、nより大きい数の黒マスについては、左から数えてn個の部分は実際には未確定の部分であるので、白マスに変える。残った黒マスは、実際に黒マスであることが確定する。
なお、右詰めで左右逆の作業で同様に解くこともできるが、当然結果は同じになる。