中合い問題の解説 その1

私の中合い問題(→ http://d.hatena.ne.jp/LS3600/20100101 )の解答をいただいたので、さっそく見ていきます。


中合いについて
http://d.hatena.ne.jp/mclh46/20100104/1262572718

LS3600さんの「新春お年玉プレゼント 詰め将棋問題」を問6まで解いてみました。

問題1)
問題1なのですが、双玉の場合について私は特に書きませんでした。書き忘れていたというのもあるのですが、双玉の場合と、双玉ではない場合と、どちらのケースについても考えて欲しかったからです。


それで、実際問題として、Bonanzaの3手詰めでは、逆王手がかかった瞬間に不詰みという判定をします。逆王手をかけた駒を取って詰むかを調べても良さそうな気もしますが、それはかなり限られた状況なので調べないことになっています。(ただし、利きのない地点への中合いする手は同飛のようにすぐに取り返して3手で詰むかを延長して探索します。)


よってBonanzaの3手詰めを高速化する方法を考える上では、双玉ではないという仮定を入れて良いのです。私の先日の中合い問題は、そのような仮定を入れています。


まあ、それはそれとして、ながとさんの答えを見ていきます。

1一玉→2二金 で一手詰み

これなのですが、1手詰みという場合、OR局面(攻め方)が1手で詰ます場合を言います。3手詰みというのは、OR局面(攻め方)→AND局面(受け方)→OR局面(攻め方)で詰みという形です。この定義からすると、ながとさんの問題1の局面は、AND局面(受け方 = 王手がかかっているほうの手番)からはじまっているので、「1一玉→2二金 で一手詰み」ではなく、これは2手詰みです。


問題2〜5)
たぶん、解答図を見る限り、ながとさんは私の3手詰みの定義のところに書いておいた文を誤解されている気がします。

・攻め方が「間接王手をして」、受け方が、「打ち中合い」をした場合は、攻め方は必ずその駒を最初に間接王手した駒で取ってそのあと「3手で詰む」かどうかを調べます。つまり、打ち中合い→同飛のような場合、その2手は手数に含みません。

いま思うに、「打ち中合い→同飛のような場合、その2手は手数に含みません。」の意味がまぎらわしかったかも知れません。


飛び駒で打ち中合いした駒を取り返して3手で詰むかを調べます。この「3手で詰む」かどうかを調べるというのは、(プログラマにわかる言葉で言うなら)3手詰みルーチンを再帰的に呼び出して調べるの意味でして、すなわち、55歩→同飛→54歩→同飛→53歩→同飛成のように「打ち中合い→取り返す」の繰り返しがあったとしてもすべて手数には含めません。Bonanzaの3手詰みはそのようになっているのです。


3手詰みの定義のなかに3手詰みが出てくるので意味がとりにくかったのだと思いますが、非プログラマの方に伝えるために、そのような書き方にしていました。


問題6)

この図なのですが、AND局面(受け方の手番)からはじまっています。そこで、直前の手は55角だとします。あと2手で詰むかどうかが問題なのですが、例えば、55同角、41飛成で3手消費します。41飛成の局面は普通詰め将棋では詰みの局面ですが、今回の1手詰めの定義からするとこれは詰みではありません。すなわち、

1手詰みは、直接王手 or 両王手によるものでなければなりません。すなわち、間接王手のみの王手は(合駒の問題があるので)1手詰みには含めません。

です。よって、この局面は、55角→55同角→41飛成にて、3手で詰まずです。よって44の焦点の歩があろうがなかろうが3手の範囲で(Bonanzaの3手詰みルーチンでの判定としては)詰まないのです。


そんなわけで、普通の詰め将棋と詰みの定義がやや異なる点が難しかったかも知れません。解答はまだまだ募集しております。コンピュータ将棋の進歩のためにどしどし解答をお寄せください。