そうだ、家でプログラミングしてみよう

はじまり

意外なきっかけだった。
一つ、パソコンが壊れて新しいのに買い替えた
一つ、家でナンプレが流行っている
一つ、社内SEでプログラミングが少しできる

家で何故かはやり始めたナンプレ。家には妻用と私用の全く同じナンプレの冊子を1冊ずつ持っている。同じ問題を「よーいどん」で始めて速く解けた方が勝ち。スピードでは妻に歯が立たない。妻が詰まっている間に私が先に進めたら勝ち。難問以外で私に勝ち目がなくなりつつある。

こうなったら機械にやらそう。

考えたこと

ナンプレは恐らく機械的に答えを導き出せるだろう。最初にプログラミングを思い立った動機の一つはこれだった。しかし、パズル問題は自分で解いてこそ楽しい。プログラミング中は、あれこれ考えることがあるので楽しいかもしれないが、プログラムが完成した後は虚無しか残らない。

そこで次に思い立ったことは、自動で次に問題もコンピュータに作らせること。
自動で解くプログラムができるのであれば、自動で問題を作成できそうだ。問題を自動作成できれば、妻との長きに渡るナンプレ勝負ができる。それに、自動で作成するプログラムを細工をすれば、自分に有利な問題ばかり生成できるはずである(後者は解く楽しさ云々が潰れるので、おそらくやらないと思う)。

目標

こんなことを妻に話してみたところ、「新しいパソコン来たんだし、面白そうだし、やってみたら?」とアッサリ同町してくれた。ついでに「目指せ、パズル作家!」。…パズル作家はちょいと荷が重いかも知れないが、ナンプレは今後も廃れないパズルであろう。ちょっと面白そう。

「ナンプレを解く」だけであれば、コンピュータの計算速度の優位性を使うべきである。すなわち1から順番に数字を入れていき、矛盾が無い組み合わせを見つける、いわゆる総当たり法がプログラムも楽だし、今(駐:この記事を執筆している「今」は2017年2月)のコンピュータなら、苦も無く出来そうである。

ただ、これはつまらない。ナンプレの問題であれば答えがついているので、コンピュータにやらせる意味は無い。本当に必要なのは、人間が考えていて手詰まりを起こした後、次に数字を埋められる場所と理由のはずである。であれば必要なのは、人間と同様の解き方をするプログラムである。

更に可能であればネットで公開するのも良いかも知れない。これは少し大きな目標とする。

要求仕様

・ナンプレを解くことができる
・ナンプレの解法は、人間が解く方法に近づける
・手詰まりしたナンプレのヒントを出すことができる
・ナンプレの問題を自動で作る
・(可能であれば)Webで公開したい → セキュリティとか大丈夫かな^^;

かくして、仕事から帰って来た後、20~30分ぐらいずつ、家でもパソコンに向かう生活が始まった。