sakurapyon’s blog

sakurapyon’s blog

3手詰を省略できないか?

sakurapyonでは3手詰とそこから呼ばれる1手詰が実行時間の約1割を占めている。
これを高速化できないだろうか?

そもそも、ほとんどの局面は不詰みなので、不詰みである局面をさっさと判定できれば良いことにする。

  1. 王手する
  2. 王手回避する
  3. 1手詰

ほとんどの不詰み局面では1の王手自体が只捨てであるはずなので、この場合だけを考えてみる。
今回は単純化のために1,3手目は駒打による直接王手、2手目は同玉に限ることにする。
(1手目を駒打にしたのは開き王手を考えないため。初手が両王手にならない場合も以下の考察でいいはず)

例:△5二玉に対して、▲5三香△同玉と取られた場合

  • 元々玉の居た5二地点には、先手の利きは存在しないはずである。利きがあれば王が取れている
  • 従って3手目の王手は5二地点への利きを発生させる必要がある
  • 駒打直接王手に限ると、5二・5三に同時に利きが発生するのは以下の場合
    • 5四香打、5四飛打
    • 4三金打、6三金打
    • 5一飛打(これで詰むのであれば、初手に打つべき)

例:△5二玉に対して、▲4三角△同玉と取られた場合

    • 3四角打
    • 4二金打・4二飛打
    • 5三金打・5三飛打
    • 6一角打(これで詰むのであれば、初手に6一角打とするべき)

例:△5二玉に対して、▲4二飛△同玉と取られた場合

    • 3二飛打
    • 5三銀打・5二銀打
    • 5三金打・5二金打
    • 6二飛打(これで詰むのであれば、初手に6二飛打とするべき)

結論

3手詰において、初手駒打王手 && 打つ位置に利きがない場合は、3手目の駒打直接王手のパターンを制限できる……はず。
条件はもっと絞り込めるけど、とりあえずここまで。間違ってたら教えてもられるとうれしいです。