number_place(数独)を自動で解くプログラムを作成しようとした話

こんにちは、星杜なぎさです。
今日はプログラミング失敗談の方を記載します。

自動回答プログラム目当てで来た方へ

Qiitaに良い実装(@shinichi1729さん)の記事があるため、そちらをご覧ください!
世界一難しいナンプレを1秒で解く方法 #Python - Qiita

自動回答プログラムを作った過去話

2年ほど前に、プログラミングを教える際の題材で、数独自動回答プログラムを宿題にしたのですよ。
その際は「縦・横・箱のルールから入る数字を1つに絞り、埋めていく」というルールで作成しました。
ただ、数独って、それだけでは解けない難問がたくさんあるんですよね…。

敗因1:仮説が間違っていた!

当時の私は「ルールから数字を絞り込めば、自動的に1つしか候補は残らないから、自動的に回答できる」と考えてました(仮説)。
まぁ、思い込んだのはいいとして、ネット上での調査を怠っていたのも相まって、一番数独の問題、とかは解けなくて??となったわけです。
その時は、「数字を仮置きして進めればOK」と思って追加実装して、無事解けるようにはなりました。

敗因2:応急対策は最適解にはならない

なんで2年も前の実装の話を思い返しているかというと、冒頭のリンク先にて超早く解ける数独ソルバーの実装を見つけてしまったからですね…。
よくよく思い返してみると、私自身が作ったプログラムの出発点は「人間が数独を解く時の方法を模倣する」といった感じだったので、全部数字仮置きの方法は考えてませんでした。
まぁ、発想の起点が「プログラミング初心者への勉強題材」だったので、回答もわかりやすくする必要があったとはいえ、思い至らなかったのは若干悔しいですね。
また、後半で数字仮置きを実装した際にも「候補が多いから、先にルールで進めるだけ進んだ方がよい」と(ろくに調べもせずに)追加実装したのも間違いでしたね…。
ぶっちゃけ、ルールの方はいらなくて、後半の仮置きonlyで解かせた方が早いです。ぐぬぬ…

教訓!

  • プログラムで人間の操作を真似するのは、プログラムでの実装の最適解にはならないことがある

  • Web上での先駆者をちゃんと調べよう!

  • てか、2年前の時点でプログラムを記事にしておこう(笑)

この記事が気に入ったらサポートをしてみませんか?