プログラムを書かないでいると、書けなくなるから。
というわけで、昔書いた数独を解くプログラムに新たにfin付きx-wingの問題を解くというルーチンを追加しようとしているのである。
言語はC言語。数独を解くプログラムはJava版とC言語版を以前に書いたのだが、もう老眼が進んでいて統合環境はとてもつらいのである。かといって統合環境なしでJavaを使うのもつらいので、C言語版を元にすることにした。
まずは新しいバージョンのEmacsを入れたりとかしたけど、それはおいておいて、git で新しいブランチを作ってfin.h と fin.c をx-wing(というかなぜかswordfishというファイル名だった)からコピーしたのであった。本当はx-wingの途中から処理が分かれるのだが、fin付きだけをテストしたりする都合があるので、そっくりコピーした。
そして昔のプログラムを見ていると、これが実によく分かる。分かるというか思い出すというか、ほとんどコメントもないのだが、何をしているかそれを書いた当時の考えを思い出した。
若い時はプログラミング能力が成長していたので、昔書いたプログラムを読むと、いろいろ直すべき点があって恥ずかしい気持になったものだが、もう年をとって成長していないので、恥ずかしい気持もなくてとてもよい。どうも俺は自己愛が強いようで、小説なんかも昔書いたものを読み返すと面白いし、ブログ(というか昔のweb日記)も読み返すと面白い。たいへん好ましい状態である。
だいたい、数独のfin付きx-wingを解くプログラムなんてものは、今流行りのAIを使えば一瞬で作れるのだろうが、老化防止の趣味のプログラムなので、自分で楽しみながら作るのがよいのだ。
そしてコメントのないプログラムはよくないという常識が業界にはあるのだが、今プログラムを読み返していると、コメントよりもデバッグ文がとても役に立つ。なにしろ統合環境を前提としていないので、printfのデバッグ文があちこちに入れてあるのだが、これがまさに要所要所で必要な情報を書き出しているために、そのデバッグ文を読むだけで、その個所で何をやっているか結構分かるのだ。
サムネ用に貼っただけで読んでない。
最大の問題はfin付きx-wingの問題を解くプログラムをテストするためには、fin付きx-wingの問題が多数必要であり、ネットで解説している例程度では足りないのである。つまりfin付きx-wingの問題を生成するプログラムも作らなければならないということである。そしてそっちの方が難しいのだ。ああ、そうかテスト用の数独問題はAIに生成してもらえばいいのか。
![[標準] C言語重要用語解説 <ANSI C/ISO C99対応> [標準] C言語重要用語解説 <ANSI C/ISO C99対応>](https://m.media-amazon.com/images/I/51umgU-LbhL._SL500_.jpg)