おはやし日記

テーマ……バイク←プログラミング←旅

我流ナンプレ解法

ナンプレ数独。有名なパズルです。

3x3のブロックに分けられた9x9のマス目があり、行・列・ブロックの中に1~9の数字を重複しないように入れていくパズルです。

ナンプレの解き方、ネットで調べるとなんか難しいのばっかりで、そんなレアケース見つかんねぇよ!って感じのばっかりなのですが、僕がやっている解法は割と見つけやすくて、連鎖的にサクサク埋まりがちだと思うので紹介しようと思います。

盤面の画像がサイズまちまちで見づらいのは許してくだせぇ

基本解法

初歩。メインではない。ぱっと見でわかる人は飛ばしてください。 盤面を見ていって数字を埋めるまでの思考を紹介します。

その1

スクリーンショット 2020-03-29 3 16 51

右から左に見ていって、

  • 上の列は4がある!上の列に4は入らない!
  • 下の列にも4がある!下の列に4は入らない!
  • 一番左のブロックの真ん中に4が入る!
  • 緑のマス以外は3と8で埋まっているので残りのマス(緑)に4を入れる!

その2

スクリーンショット 2020-03-29 3 21 37

上のブロックに注目して、

  • このブロックに残り入るのは4, 5, 7
  • 下の方を見ると左の列に4がある!
  • 左の列には4が入らないので残りのマス(緑)に4を入れる!

その3

スクリーンショット 2020-03-29 3 38 56

緑のマスに注目して、

  • 横に見ると1, 4, 7がすでに埋まっている!
  • 縦に見ると3, 8, 9がすでに埋まっている!
  • ブロック内に2, 5がすでに埋まっている!
  • 緑のマスに入れられるのは6のみ!

その4

スクリーンショット 2020-03-29 4 42 30

ちょっと見つけにくいテクニックですが紹介

一番上の列をを見て、

  • ABCは同じブロックに8がある!ABCは8じゃない!
  • DEは下を見ると8がある!DEは8じゃない!
  • 残った緑のマスに8が入る!

その5

スクリーンショット 2020-03-29 3 49 39

左上のブロック、

どう見ても緑のマスに4入れるしかないじゃん!(書くの飽きた)

数字を直接確定させるのはまあみんな分かりますよね。はい。

我流解法

さて、僕のやってる解法ですが、要点はただ一つ。

ナンプレを解くときに、入れる数字の候補を小さく書き込むと思いますが、そのときに

その数字がブロックの中で2箇所にしか入らないときに限り

候補をメモする。というものです。

ちなみに、候補を書く位置はマスをさらに9等分した位置が良いです。文字と位置との両面でなんの数字が候補なのか分かります

スクリーンショット 2020-03-29 4 29 18

こんな感じ。5はど真ん中になりますが躊躇せずその位置に書きます。位置で判別できるので、字が潰れるくらい小さくても問題はないです。

理由としては、漠然とですが

  • やたら候補を書くと逆にこんがらがってわかんなくなる
  • 候補を利用しやすい(利用する方法をみつけやすい)
  • 候補が入る場所をブロック内で2箇所に制限することで最終盤サクサク埋まる

こんな感じですかね、まあ、完全に数字の位置関係から埋めるのは難しいから候補を書くけど、やたらめったらに候補を書き込むよりは楽、って感じです。

候補を入れたり入れなかったりする例

候補を書き込むとき

77831554-c3bf9f80-7127-11ea-87c7-3a8903eb042d

緑のマスは4が候補。4が入るのは上段真ん中ブロックで緑の2箇所のみなので候補を入れます。


77831770-f918bd00-7128-11ea-82cb-0116faa6e63c

緑のマスは4が候補。4が入るのは中段左ブロックで緑の2箇所のみなので候補を入れます。


スクリーンショット 2020-03-29 14 46 47

他に2つの候補を書き込むテクニック。

下のブロックのように、ブロック内の縦や横で1列埋まっているときに狙える…………かもしれない。

画像内では右の列が6確定済みなので、下のブロックでは黄色マスに候補6が立ちます(書き込まない!)。それを踏まえて真ん中のブロックに戻ると左の列に6を入れなきゃいけないですが、4が1つ入っているので残りの緑マスに候補6を記入します

候補を書き込まないとき

スクリーンショット 2020-03-29 4 33 15

黄色のマスは4が候補で、メモしたくなりますが書きません。3マスあるので。しかもどうせぱっと見でわかるので。


スクリーンショット 2020-03-29 4 36 49

こういうとき、黄色の2マスに候補4が入り、縦に見ると2箇所のみなのでメモしたくなりますが、書きません。

2つのブロックに分かれているので。後々片方のマスに4が入らないと判明すれば基本解法その4で埋められます。

候補の使い方

さて、上で入れた候補をどのように活用していくのでしょう

テクニックA

「候補を消したら残りが確定」法

書き込んだ候補は、ブロック内でオンリーツー(!?)なので、片方が潰されればもう片方に候補が確定します

スクリーンショット 2020-03-29 5 00 25

たとえばこう候補が入ったときに、緑のマスに何か候補が確定したとすると

スクリーンショット 2020-03-29 5 03 11

緑のマスに入っていた5, 8はブロック内のもう一つの候補の場所に即座に確定します

スクリーンショット 2020-03-29 5 07 11

めっちゃ嬉しい!

テクニックB

「2つの候補マスがかぶるとその他の数字は入らない」法

スクリーンショット 2020-03-29 5 46 36

こういう局面で、緑の2マスを見ると、どちらにも6, 9が入っています。左上のブロックの中で6, 9はそれぞれ、緑のマスにしか入ることができません。

ということは、緑のマスは6, 9のどちらかで確定なので、右の緑マスに入っている候補4は消去します。

スクリーンショット 2020-03-29 5 52 48

さらに、ブロックのなかで、書き込んである候補4が入るのは、今消したところか、もう一つの書き込んであるマスのどちらかなので、残っている方のマス(右上)に4が確定します!

テクニックC

「並んでいたら延長線上にはあり得ない」法

スクリーンショット 2020-03-31 17 24 47

色がついているマスに候補3が入っているとき、上の段で3が入るのは黄色のマスのみです。黄色マスのどちらかに3が入るので、赤マスの候補3は消去できます。

すると、残りの候補のところ(緑マス)に3が確定します。

スクリーンショット 2020-03-29 6 55 00

この局面では、黄色のマスに入った候補6がカギです。

基本解法その1と同じ見方で縦に見て行きます。

黄色のマスで候補6が縦に並んでいるので、その下には6を入れることができません。あたかも黄色マスのどちらかに6が確定しているかのように見ることで左下の緑色のマスに6が確定します。

テクニックD

「候補2つで2列埋める」法

スクリーンショット 2020-03-29 15 23 32

黄色のマスに4が候補として入っていたとき

どちらの候補も上列と下列で入っています。ということはどちらにせよ左ブロックでは真ん中の列に4が入ります。

場合によってはこれを利用して候補2つをいれても良いですが、上の局面では左下に4があるので緑のマスに4が確定します。

複合

基本解法その4テクニックBの複合で例えば、

スクリーンショット 2020-04-01 3 33 27

この場面では緑マスに1が確定します(ついでに左の空きマスに6が入りますが)。

数字の並んでる列を見ると、まだ場所が確定してない数字は{1, 2, 4, 6}です。

さらに、2と4は列の中で2箇所、黄色マスに候補として書かれているのでそこにそれぞれ確定します(どっちがどっちかはともかく)。というわけで黄色マスに1, 6は入りません。

(黄色マスに2, 4を入れたのは(他のマスを省略していますが)あくまでもブロック内で2箇所に入るものだったからということに注意)

さらに、左下に1があるので1の入れる場所は列の中で緑マスだけ、ということになります。

番外編テクニック

スクリーンショット 2020-04-01 0 24 49

まず、上のような局面では緑マスに4が確定するのは明らかです。右から左に見ていけば分かります。

スクリーンショット 2020-04-01 0 27 55

次にこのような局面(なんか上でも似た局面書いた気がするな…………まあいいか)。

黄色のマスに候補を書き込みはしません。ただ、黄色マスのどこかに4が入るのはわかっているのでそれを踏まえて緑のマスに4を確定させます。このくらいであれば候補を書き込まないでもやれると思います。

ただ、混乱の元になるので、決して黄色マスへの候補の書き込みはしないです。

まとめ

まだ自分が使っているテクニックがあるかもしれないですが、ひとまずこんな感じで。

ともかく、候補はやたらめったらに入れるのではなく「使えるように」入れる、と言うことです。

これで大概の(?)ナンプレは解けると思います。

手が進まなくなったら、「数字を決めて盤面を眺めてみる」だとか「もう少しで埋まりそうな行・列・ブロックを見る」とかに立ち返れば意外と見落としがあったりするものです。

では、頑張ってください(!?)

あと、今、プログラミングにナンプレを解かせようとしています。

o-treetree.hatenablog.com

よければどうぞ。

おしまい。

プライバシーポリシー ・お問い合わせはこちら