たまにはコーディングしておかないとなまってしまうので
dice shogiとmini shogiとを強くしてみる
現在の順位は4位と7位
<dice shogi>
これまでの設計
角と飛車の複数範囲の効きを無視する
歩と銀の成り駒を入力時点で金に変換する
持ち駒情報を一切利用しない という豪快な設計が特徴
3時間ほどで簡易詰めルーチンの実装ぐらいも目指し
diceshogi世界2位を目標にする
他にも
駒の効きもいくつ効いているかではなく効きがあるかないかという集合型での実装
コードを詰めまくって拡張しにくい
過去の自分もう将棋等のルーチン作り飽きていて
斜め上のコーディングばかりしている
とりあえず集合型をいったん外しておいて
内包表記とかをバラシて
飛車角の効きをループ使って正確にする
王手判定
王手をかけた駒にほかの駒の効きがあってかつそこに相手の王以外の効きがないときを判定する
王の逃げられる範囲すべてにこちらの効きがある時を簡易詰みと判定させる
一間龍のような詰みは判別できない
TVerで肝臓を奪われた妻などをみたりしながら
3時間半ぐらいたったので挑戦
目標の世界2位に到達
対局を確認してみると詰みの判別が少しおかしい
調べてみると歩の効きがおかしい
結論 先手と後手の駒の動きを逆にしていたことが判明
駒の移動に関してサーバーから有効手の中から選んでいたのでなんとか動いていた
飛車、角、龍、馬、王は逆でも同じだったのでそれでも評価値もそこそこ問題なかったようである
<mini shogi>
これまでの設計
角と飛車の複数範囲の効きを無視するという...
こちらの上位者は詰将棋までやっていそうで相手言語はC++
3位は無理そうなので4位を目指すことにする
もともとコピッて作っていたので
案の定 先手と後手の駒の動きを逆にしていたことが判明
詰み判定を同様に...
こちらはチェック判定が入っていた しかし実装はなんか無駄に長く
今回作った方がすっきりしていたので最後に置き換え
投入してみると5位
4位の人とのさしの勝負では勝っているが上位と当たりすぎたのが遠因
対局を確認してみると角が馬にならない
駒が成る手を評価全くしていない
そこだけ手直しして
目標の世界4位に到達
さてTVerでアンチヒーローみよっと