やっと UTTT をクリア(Legend入り)したので自分がやった実装のメモを残します。
ざっくりした内容で、正確性についても保証できませんが、Legend 入りを目指す方の参考になれば幸いです。
今回、たくさんの先人の知恵を拝借しながら実装しましたが、特に以下の記事にはお世話になりました。この場を借りてお礼申し上げます。
https://inaniwa.hatenablog.com/entry/2020/07/05/102506
https://qiita.com/thun-c/items/058743a25c37c87b8aa4
精度と速度のバランスから以下の実装とした
初手を固定することで1手目の探索の精度を上げる
大半の結果は捨てられることにはなるものの、使い回しの実装自体は軽くデメリットがなさそうなのでやっておく
3x3 のパターンは 18bit で全パターン表せるのでそれらについて決着状態やそこから遷移しうる盤面(手のリスト)を前計算しておく
早くなりそうなものをつける
メモリアクセスパターンを考慮した処理順やデータ構造にすると速度アップすることがある
木のノードや状態の構造を静的に配列で確保しておき先頭から順に使う
時間ではなく探索回数で探索を打ち切る機能