2020年9月24日(木)リタイヤ生活1092日目

今日は、台風12号が東京の東、太平洋上を北上中だったが、
幸い東に逸れたのと、台風の右(西)側だったため、
曇り時々小雨程度だった。
たが、気温が下がって大分秋めいてきた。

 

午前中はジムへ。
30分を2本で、楽しく汗をかくことが出来た。
帰宅してからは先日のScratchのづつきをやった。

 

ナンバープレイスの問題を解答するプログラムを作成して、
先日完成していたのだが、解くまでの時間が非常にかかっていた。
総当たりで解くプログラムなのだが、
遅いので、得意な人が解くよりも遅いくらいだった。
やはり人よりも早く解けないと作品とは言えない。


原因を調べてみると、どうやら解いている途中の状況を表示する部分で、
全体の80-90%の処理時間がかかっているようだった。
これはターボモードにしてもあまり改善されない。
そこで、今日は表示部分の処理速度を速くするようなチューニングをしてみた。


まず、少しロジックを見直して、ナンバープレイスのマス目に
新しい数字が割り当てられた時に再表示する部分のロジックを簡略化した。
これでも少し効果は出たが、まだ依然として時間がかかっている。

 

いろいろ試行錯誤してみたが、今のScratchでプログラムできる範囲では
ここまでのようだったので、きれいな処理方法は諦めて、
1秒間に1度描画する方式に改造した。
結果として、途中の探索木の詳細までは表示できなくなってしまったが、
ターボモードで走らせれば、人よりも早く解くことが出来るようになった。
これがPythonならばここでこうやるのに、と残念だった。

 

これでナンバープレイス解答プログラムは完成。
当初は、中学のパソコン部向けの課題と考えていたが、
スタックなど幾つかテクニックを使っているので、
中学生には難しすぎるかもしれない。
でも出してみて、いろいろと質問に来る子がいれば、
鍛え甲斐がありそうだ。