ナンプレ(数独)

Updated on October 10, 2020

  ナンプレ(数独)

   ナンプレ(数独)を自動的に解くExcelマクロです

Web Hits visitors today or 1 visitors on Ocober 10, 2020

ナンプレ(数独)を解くExcelマクロを作りました。ナンプレは一人で考えながらマスを数字で埋めてゆくことを楽しむものですから、プログラムやマクロで自動的に解かれても何も面白くはありません。しかし、ナンプレを自動的に解くExcelマクロを作ることは、マスを埋めてゆくのと同じように楽しい作業でした。

  1. 下記のボタンをダブルクリックしてnanpure.xlsをダウンロードします。

         

  2. ダウンロードしたnanpure.xlsmをダブルクリックします。

  3. 左上の水色セル(D,3)に1, 2, 3…の数字を記入して[スタート]をクリックすると、右のQ1, Q2, Q3…のボックスの数字がコピーされ、埋め込み処理が始まります。
  4. または、空白ボックス(D, 4)〜(L, 12)に任意の数字を記入した後、水色セル(D, 3)に数字ゼロ(0)を記入して、[スタート]をクリックすると、記入された数字に基づき埋め込み処理が始まります。
  • Q1, Q2, Q3…の各ボックス内の数字を書き換えても構いません。Q1, Q2, Q3…の右端に追加の番号でボックスを追加しても構いません。
  • 処理を中断するには[Fn]と[End]を同時に押します。
  • 下部の空白ボックス(D, 14)〜(L, 22)は処理途中の数字を一時的にコピーする場所なので何かを記入しても処理中に上書きされ、処理が終わると消去されます。

アルゴリズム

ナンプレを解く場合、特定の数字が入らない行または列を鉛筆で隠しますが、このExcelマクロでは仮に「×」印を記入して、そこには数字が入らないことを示します。そうして各ブロックに数字も×印も記入されない空白マスが1つ残れば、そこに目的の数字が入るわけです。

もう一つの解き方は、各空きマスに入り得るすべての数字を鉛筆で小さく書き込んだ後、各ブロック、行、または列で1つだけ記入された数字があれば、そのマスにはその数字が入ります。このExcelマクロでは小さい数字をマスに書き込む代わりに、3次元配列の要素に格納して、1つだけの数字を検索します。「各ブロック、行、または列で1つだけの数字」および「1つのマス(要素)に1種類の数字しか入らない場合」のいずれもそのマスに入る数字となります。

手作業でナンプレを解く場合、難しい問題では、上記の手順を踏んでも、1つのマスに入る数字の候補が2〜3種類あって1つに絞り切れない場合、または2〜3ヵ所のマスのいずれかに入るがマスを絞り切れない場合があります。このExcelマクロでは、それまでに確定された9 x 9マス全体を下にコピーした後、入り得る数字の1つを記入して残りを解いてみます。すると最後まで解ける場合と、仮に記入した数字では、矛盾が発生して解けない場合が発生します。矛盾が発生した場合は、下にコピーしておいた数字をもとの場所に戻し、別の候補の数字を記入して、残りを解きます。矛盾が発生した場合は、これを繰り返すことにより、いずれ正解にたどり着きます。

このようなアルゴリズムで、これまで解けない問題に出会ったことはありません。

もし、解けない問題があったら、permuter@gmail.comまでお知らせください。Excelマクロを改良したいと思います。

関連ウェブサイト: 佐藤浩嗣ウェブサイト

Copyright (C) Permuter at permuter@gmail.com. All rights reserved.