バグや解析できない問題があったら……


これまで解析機能に加えた修正のまとめです。
ご参考までに、どうぞ。
誰が読むんだろ。必要あるのかな。
作者の自己満足? もしくは露悪趣味? 恥さらし?
まあ、別に、今解ければいいって人は読まなくていいんですけど。
修正の歴史も意外とドラマティックだったりするんですよね。
やっぱり自己満足だ。
まあいいや。聞かせてもらおうじゃないの。
聞いていただきましょう。まずは2010年1月、version 1.4 で修正した2個
自分で気付いていた動作の不備と、中村様に指摘していただいたバグ。
はい。

あらかじめ気付いていたのはレベル3にあった動作の不備。
小ループ禁止の連発に対応できず、手動で繰り返さねばいけなかったものです。
やっと、1回の実行で解ける限り解いてくれるようになったのね。
できるならもっと早くやっとけよ!……ってのは酷かな?
う〜ん、今まで気付かなかった解決法をヒラメイタらしいから。
「人生にはそういうこともある」らしいよ。
へえ、まあいいや。
もう一つの指摘されたバグは?
1〜3の数字に線が引かれてない場合に、完成の判定で見逃してしまうバグ。
その時は修正して表面上は解決したのですが、実はもっと根深いものでした。
え?
version 1.4 の修正で終りじゃなかったんだ。
はい。その時は分からなかったのですが……
その後、上村様の指摘で根本的な問題に気付き同年9月の version 1.6 の修正へ。
なるほど、真の原因は別にあったと。
ドラマティックなわけだ。
完成(単独ループ確定)時に数字周囲の線不足を見逃してしまうバグ。
後に指摘されたバグが、以前のバグのそもそもの原因だったわけです。
ああ……そうか。そうだね。
確かに同じ内容だね、この2個のバグは。
線不足の判定は普通は×印でします。空欄はまだ線が引かれるかもですから。
でも完成時はもう線が引かれないので、空欄も×印として判定すべきなわけで。
ええと……そうか。
単独ループ確定した時は特別扱いしなくてはいけなかったんだ。
普通に×印をつけて解いていれば、条件として出現しないバグなんですが。
version 1.6 の修正をして、version 1.4 のその修正は不要になり削除しました。
まさに「そうだったのか!」って感じ?
痛恨の経験だね。
実は、この問題はもう一つ続きがありまして。
矢藤様と若槻様のご指摘による同年11月 version 1.7 の修正
まだ引きずるの!
それも2人から指摘されてるし。
完成する瞬間に小ループ禁が絡むと、ある条件下で間違った解析結果になるバグ
ある条件とは、最後に引かれるべき線を含むマスに数字が入っている状態
込み入った出現条件だねえ。
どうしてそうなるの。
それはプログラムの構造や条件分岐によるもので……
ともかくも、これは例の根本的バグと少し関係しています。……わかる?
ええっと……ああ……そういわれれば、そうかも。
「ある条件」の内容が、そうだね。
version 1.4 で加えた修正の処理が、一ヶ所、思慮不足でした。
version 1.6 でもそれを継承して続いていたので、それを削除で解決。
必要だと思って加えた処理だったんでしょ。
難しいもんだね。
作者も、解析プログラムがいかにデリケートか、思い知ったようです。
あと、同時期に指摘されたバグを調べると実は原因が同じだったって、スゴイ?
出現しにくいバグを同時期に指摘されたのだったら、面白いね。
そうか、原因が同じでもバグとしての出方は違うんだ。
残り二つ。年がかわって2011年10月 version 1.8 での修正
指摘してくださったのは version 1.7 でもご指摘いただいた矢藤様。
おお、2度目だ。
今度は何?
背理法で矛盾の検出が不十分でした。解ける問題を解けないとしてしまいます。
まあ普通は別の箇所から解けてしまうので、よほどの限定条件下でしか表に出ません。
ほとんど表に出ないから、それまで判らなかったんだ。
それを見つけた矢藤さんて人はスゴイね。
常識外れの問題をたくさん作られているようで、おかげさまで大助かりです。
究極のは最後、時間を戻して2010年6月 version 1.5 で改良した1個
矢藤さんから3度目のご指摘、と。時間的にはこれが最初だけど。
何だったの?
「解き口」が無い問題は解けなかったのを改善し、解けるようにした。
解く時の入り口になる簡単な数字の配置を、この場は「解き口」と呼びましょう。
レベル1で解ける内容イコール解き口なわけね。
解き口がないと最初から先読みをせねばならない・・・・・・無茶な問題!
だからニコリに投稿しても載らないですし、普通は作りません。
それをあえて作る人が世の中にはいました。素晴らしいですよね。
これが、いわゆる「特殊な偏った問題」の一つか。作者も想定してなかったんだ。
でもレベル5の背理法で解けたんじゃないの?
このソフトの背理法では「線をどう延ばせるか」を判定していました。
だから解き口がなく線が引かれない状況では解けませんでした。
なるほど。線を基準にした解析なわけだから。
レベル1で解析が進まなければ、その後も解けない仕組みだったわけだ。
レベル5に「線を引くと破綻するからここは×」という背理法を加えました
解き口が無い問題にはこれが実行され、それでほとんど解けるはずです。
ほとんど解けるはず?
ということは、解けない問題もある?
この背理法をくぐり抜ける問題を果たして作れるのかどうか。
解き口が無い問題自体が皆無だから、もう想像の世界だよね。
まあ、これ以上追求するのは現実的じゃあないよね。
重箱の隅をつつくような話になっちゃう。
でも、まあ、解けない問題があれば遠慮なく教えていただきたいです。
先にも言いましたが、バグや解けないタイプの特殊な問題はありえます。
確かに、可能性としてはね。
もし何かおかしい動作を見つけたら遠慮なくお知らせください。
一人で作っていると気付かない事が多い、と作者の言葉です。
バグに気付いても知らせてくれる人は少ないよね。
ほとんどは放置だもんね。
そういう人に知らせてもらいたいそうだよ。
知らせてくださった4人の方には大感謝です。ありがとうございました。
さて、次は?
次は3つの判定機能です。
今解説してきた解析も利用しています

戻る