入玉勝ち宣言
マイムーブさんのブログで知ったのですが、きのあ将棋さんが入玉勝ち宣言を実装していなくて勝ちを逃したらしいですね。
で、実際に選手権でそういう事があると、自分もちゃんと実装したくなったので真面目に考えてみました。
大雑把に考えてみると、こんな感じの実装で出来そうです(多分)。
// 局面に付随する情報 // int ouX; // 王将のいる筋 int ouY; // 王将のいる段 int points; // 持ち点 int komaNum; // 敵陣3段目以内の駒の数(王将除く) int existKiki[ 11 ][ 11 ]; // x筋y段に後手の利きがあるなら[x][y]が1になる // 判定 // // 入玉勝ちなら0以外の値が、そうでなければ0が返る // int isNyugyoku_sente() { return ( ( 9 - ouY ) / 6 ) // ouYが3以下なら1になる * ( points / 28 ) // pointsが28以上なら0以外になる * ( komaNum / 10 ) // komaNumが10以上なら0以外になる * ( 1 - existKiki[ ouX ][ ouY ] ); // existKikiが0なら1になる }
各種変数は簡単に差分計算出来るでしょうし、これなら内部ノードで呼んでもそれほど時間はかからなそうです。
あ、でも入玉を目指す評価関数は別に作らないと駄目ですか。うーん・・・