2019年にタイのタマサート大学シリントーン国際工学部の学生に対するインターンシップとして、進化計算の実習を行いました。その時の課題が「ナンプレの問題の自動生成」でした。その前にも、同様のテーマで、大学および高専のインターンシップとして実施しております。
ナンプレの問題を解くのは、プログラミングに少し慣れればできるでしょう。何らかのプログラミング言語の入門コースを終えたところで丁度よい課題かと思います。
ナンプレを解くプログラムはネットに溢れています。問題の写真を撮るだけで問題を把握し、解いてしまうようなアプリも見受けます。
しかし、なかなか問題を作るプログラムを見かけません。不思議なことです。
問題を解くプログラムは易しいが、作るプログラムは非常に難しいと多くの人が思っているのでしょうか?
進化計算という考え方が分かると、問題を解くプログラムができてしまえば、問題を作るプログラムは簡単にできることが分かります。
まあ、口で説明しても無駄なので、実際のプログラムを見てください。
4つのソースファイルからできていて、合計740行と、とても短いです。問題を解くのがSolver.javaで278行、問題を自動生成するのがGenerator.javaで169行です。
このプログラムは難問、つまり難しい手筋の問題を解いたり作ったりするようにはできていません。それらに対応するように拡張する場合、Solver.javaが大きくなっていくだけで、Generater.javaはそのままでも大丈夫です。
とりあえず、インターンシップでのプログラムをほぼそのまま公開しているので、色々問題もあります。
でも、そんな少々のことより、ヒント数が17〜18個の問題だって、こんな短いプログラムで生成できるということを味わってください。