Updated on October 10, 2020 ナンプレ(数独)ナンプレ(数独)を自動的に解くExcelマクロです |
ナンプレ(数独)を解くExcelマクロを作りました。ナンプレは一人で考えながらマスを数字で埋めてゆくことを楽しむものですから、プログラムやマクロで自動的に解かれても何も面白くはありません。しかし、ナンプレを自動的に解くExcelマクロを作ることは、マスを埋めてゆくのと同じように楽しい作業でした。
アルゴリズムナンプレを解く場合、特定の数字が入らない行または列を鉛筆で隠しますが、この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. |