Bonanzaのadd_behind_attacksは結構無駄

さて、昨日の問題の答えですが、平岡さん(id:hiraoka64)から昨日のコメント欄に解答がありました。詳しくは昨日のコメント欄を見ていただきたく…。



また、他の駒(桂・角・飛)の王手生成についても同様です。さらに言えば昨日のケースではp[0]だけが問題であり、p[1]もp[2]も関係ないです。p[1]とp[2]についてはまったくの無駄です。


などなど、Bonanzaの王手になる指し手生成については結構無駄なコードのオンパレードなのです。
私がいろいろ書き換えたところ元のコードの3倍ぐらいの速度になりました。


私の書きなおしたコードは複雑怪奇なコードなので、ときどき条件に抜けがあったりして、まだとてもbuggyな状態です。Bonanzaソースコードはその点、極力そういうバグを引き起こす可能性を排除しているところが素晴らしい設計理念だなぁとは思います。私のほうは「バグってもいいから1クロックでも速く!」というチキンレースさながらなのでアレですが。


それはさておき、Bonanzaのような長年公開されていて、多くの開発者が参考にしているようなソースコードであってもこのようなとんでもないバグが潜んでいるわけですね。


Bonanzaですらこうなのですから、コンピューター将棋ソフトのプログラムを公開しても、バグレポートが来ることなんてまずありえないわけです。誰も真面目に読んじゃあくれません。Bonanzaほどシンプルなソースコードでなおかつ強いなら話は別ですが…。


私も自分のソースコードの一部(世界最速の指し手生成ルーチンetc…)をライブラリとして公開しようかとときどき思うのですが、きっと誰も読んでもくれませんので、公開をためらっております。


開発者同士でソースコードを交換(トレード)すれば結構面白いんでしょうね。

出す) 世界最速の指し手生成ルーチン
求む) ponanzaのソースコード

みたいな感じで…。