1ページ目から読む
20/24ページ目

 だから、局面を保存する領域を先手の局面用と後手の局面用とに分けてやることで、このチェックを端折れる、そういう狙いがあるんです。

──なるほど! いや、すごい工夫じゃないですか!

磯崎:
 しかし『Stockfish』が1年前に改良した部分をやねうら王に取り込んだことで、針に糸を通すような細い経路を通って、後手の局面を保存する領域に先手の局面の指し手が紛れ込んできまして、それで今回、先手用の指し手を、後手が指してしまっているんです。

ADVERTISEMENT

──……ようやくバグの原因が理解できました。『今回のバグの原因は合法手のチェック(駒が成れるかどうか)が甘いことだろう』という大方の予想に反して、そのチェックは最初から意図的にやっていないというのが実際のところだったんですね……。

磯崎:
 そうです。『なんでそんな基本的なチェックすらやってないんだ、プログラミング素人かよ!』って思っている方も大勢いらっしゃるかと思いますが、こっち(私)はプログラミング45年もやってるわけでしてね(笑)。

──その今回のバグの遠因となったStockfishって、チェスのソフトですよね? チェスって取った駒を使えないし、駒が成ることもそんなにないじゃないですか。

磯崎:
 そうですね。プロモーション(成り)は、一番奥まで行ったポーンしかできませんし。

──でも将棋は持ち駒を自陣に打つこともできて、さらに駒が成ることも多い。だからStockfishでは潜在的に見過ごされていた現象が、将棋になったときにそれなりの頻度で発生するようになった……ということはありませんかね?

磯崎:
 そういう側面もあるでしょうね。まあ、Stockfishは非常に複雑で、しかもバージョンアップしたときに『ここは変わってへんやろ』とこっちが思ってる前提条件が変わってたりすることもあります。

──どうして今もStockfishがバージョンアップするたびに、やねうら王に取り込み続けているんです? そうしなかったら今回のバグは起こらなかったわけですよね?