■ピン情報の更新(アピール文章)
http://vivio.blog.shinobi.jp/Entry/159/

なのはの局面データは利き情報(先手、後手)とピン情報を持っている。
手を進める処理および手を戻す処理においてのピン情報の更新を次のように行っている。
まず、玉の利きを延長し、利き情報に入れておく(下図:黒=自玉、赤=相手玉)。
※実際には局面データの初期化時に設定し、玉移動時に更新する。

図面

自玉を動かす場合:
・自玉に関するピン情報を更新する。
・相手玉の利きの延長線上に自玉の移動元、移動先がある場合、その線上のピン情報を更新する。
(2六玉とする場合、4四から1七のラインのピン情報を更新する)

玉以外の駒を動かす場合:
・移動元、移動先が自玉、相手玉の利きの延長線上にある場合、その線上のピン情報を更新する。
(5五に角がいて3三に移動する場合、自玉の4六〜9一、3六〜3一のライン、相手玉の5四
〜5九、4四〜1七のラインのピン情報を更新する)


■なのはの詰ルーチン(アピール文章)
http://vivio.blog.shinobi.jp/Entry/172/

なのはの詰ルーチンは証明数と反証数を使用した WPNS を基本にし、
・優越関係
・最小距離法
・証明駒、反証駒
を実装している。実戦では必要ないだろうとの判断で探索中のハッシュのクリアは行っていない。
また、なるべく歩角飛の不成を読まないようにして、かつ打ち歩詰めが絡む局面で詰みを発見でき
るように以下のようにしている。
(1) 王手生成では歩角飛の不成も含めて全ての王手を生成する。
(2) 証明数・反証数の計算のときに、打ち歩詰めが絡まないときは歩角飛の不成を無視する。
(3) 証明数・反証数の計算のときに、打ち歩詰めが絡むときは歩角飛の不成も含めて計算する。
したがって、不成を生成しないプログラムが詰みを発見できない以下の局面でも詰みを発見する。

図面

現在は歩角飛の成りによる打ち歩詰めかどうかに関係なく探索中に打ち歩詰めが発生したときは打
ち歩詰めが絡むと判断しているため、非効率になっている場合がある。

■なのは詰(アピール文章)
http://vivio.blog.shinobi.jp/Entry/173/

[プログラム]