メニエスの名のもとに

プログラミング関係を中心としたぐだぐだブログ

ナンプレ(数独)問題作成プログラム その22 normalize

normalize

analyze の最初の版で目指していたのは、convertによって変わらない解法のリストを出力することであった。それとは別に、convertによって替わり得る問題、つまり実質的には同じ問題を違う問題として出力してしまうという危険性を避ける必要がある。それには何らかの基準で正規の形を決めてしまえば良い。
normalize は固定数字(初期数字)の位置が左上の方に多く集まるようにconvertで変換し、その後、ナンプレ盤面配列の順序でみて、最初から123というように数字が出るように数字を振り直すことによって正規形を得る。その過程でconvertの変換のすべての組み合わせを試すので、すべての組み合わせについて単純版analyzeを実行して、仮の評価値を計算し、評価値が最も低い解法の組み合わせを求める。これでだいたいやりたいことができる。
convertは対称性を崩さないようにしているので、組み合わせの数は多くないから計算時間はそんなにかからない。逆に、この正規化は真の意味での正規化ではない。しかし、まあいいことにする。
MSaito/NumPl · GitHub

次は generate

次はgenerateだが、またちょっと他のことをしなければならないので、少し間が開く。

読んでいる本

お薦めするって程でもないというか、現代のミステリファンからするとかなり物足りないのではないかと思われる。しかし、読める。読めるというのはどういうことかよく分からないが、読めない本もあるのだ。古い作品を読むときは、古さに合わせるということを読者の側でやって当然という気持ちで読むからだろうか。