indexboard.ml

BitBoardの実装がだいたい終わった。ので、IndexBoardを作ってみるか。C++でも書いたこと無いんだよな。
要約すると、hor, ver, diagの基本4インデックスでflipの判定を行って、それとは別に拡張インデックス*1(cornerとか2Xとか)は個別に対処。各hor, ver, diagに関して、着手箇所からどのインデックスのどこを変更すればいいのか決定する。そのリストを用意しておいて、着手したらそれを見ながらインデックスを修正。何かいてんのかわからんな。
拡張インデックスがどんな形のマスクであっても、flip用テーブルを適切に用意できれば現実的な時間(キャッシュからはみ出るとしても)で終わりそうだ。これで、網目状のパターンとかが試せる。
しかし、問題はこういった石のパターンだけでいいのかという点だが、他に何かうまいfeatureはあるだろうか。白黒空の3値ではなくて、2値にすれば、short位の範囲でももっと大きな範囲をカバーできるな。たとえば、blankのパターンとか。それを簡略化したのがparityともとれる。
にしても、OCamlのソース、ホントに短いな。bitboard.cppが900行、bitboard.mlが90行。うーん。まぁ、まだ速度追求してないし、MMXとかないからあれだけど・・・。

*1:ここら辺は造語