メニエスの名のもとに

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

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

他所様のホッテントリに便乗して誘導

突発的にC言語でプログラミングが書きたくなる病 | blog.smarteducation.jp
がはてぶのホッテントリ?っていうのに入っていたのでブコメでここに誘導するというセコい手を使う。何度もやると怒られるだろうな。いや、内容的にもC言語でのプログラミングだし、それならSQLよりもナンプレみたいなパズルゲームでしょ。
というような主張は成り立たないこともない。

バグ発生


これ、紫が四個の組で確定しているから、赤が候補から削除できるというヒントを示しているんだけど、バグっている。これ、下にNaked Quadruple と表示されているけど、赤のあるマスを見ると67が二つのマスだけにあるので、Hidden Pair と表示されるべきなんだ。そして紫色は67につくのが正しい。
実のところ、Naked でも Hidden でもこの組み合わせを探すプログラムは一緒で、この例では1276 が Hidden, 3459がNaked と判定しているのである。それは3459の四つの数字で四つのマスを占めていて、それ以外のマスに3459のどれかが入っていると判定した時点で、一個だけ数字が入っているマスを除いた全ての数字の数から3459の四つを引いて4という数になるが、これが3459の4つよりも大きいなら3459の組み合わせがNakedそうでなければ、3459以外の数字のHidden という判定なのである。これが間違い。
どうすりゃいいんだ。確定的に占有しているマス以外で3459を含んでいるマスの数がhidden なんとかとして、hidden なんとかとnaked なんとかの数の小さい方をヒントとして表示するでいいのかな。(追記:これじゃだめ。例えばhidden pair なら片方がnaked みたいな時がある。上の例で一番下の367が67だった場合。なかなか難しいな)
ただ、問題作成に限定すれば赤字が削除可能という点は同じなので、作成される問題が変わるわけではない。でも難しい問題を選び出す段階で難しさのhidden いくつ、naked いくつというのを使いたいのでやはりちゃんとやらなければならない。

GitHub に入れようとして失敗

なんかこれまでのレポジトリは、コマンドで操作していたのに、手順を忘れて解説ページをみながらやったらGitHub ツールというのをダウンロードしてしまい、既存のディレクトリを指定したらプロジェクト名と違っていて新しくレポジトリを作成してしい、ssh キーも作成されて訳分からなくなったので、またあとで最初からやり直す。