パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

ボードゲームの高速化

2020-08-07 | Python

CodinGameに新しくDots and BoxesがCONTRIBUTEされていたので遊んでみます。

実に他愛もないアルゴリズムなんですが、たまたま当たり、

まだ参加者が少ないのでとりあえずトップに、そして高速化することにしてみました。

 

ルール

お互いに線をひいていきます。

ボックスの4つで獲得、獲得した時まわりも3つになればボックス獲得で線も追加され連鎖していくようです。

最終的にどちらが多くのボックスを取るか。

 

初期作成

周囲のボックス情報を取得するのに都度、

周囲のボックス名を計算、

そしてボックス情報を全ループしてその周囲のボックス名と一致したら取得しています。

 

高速化

1)ボックス情報をボックス名をキーに辞書登録してみたところ、20%ほど速度アップ(思ったよりあがってない)

2)ボックス名、方向をキーに周囲のボックス名の入った、テーブルを最初に全作成して5%ほどアップ

3)辞書のない場合にgetとdefaultを使用せず、キーがあるか判定して条件分岐をして5%ほどアップしました

 

 

感想

1ターンに100手ぐらい読むアルゴリズム、56ターンほどの全計算がわずか13ms

こんなのに計算で人間が勝てるわけがない。棋士が数年前まで勝っていたというのがすごいと思いました。

 

うまいこと分配するアルゴリズムがあれば、 物資面ではあっという間に幸せになれそうな気がします。

関数名がtotoroになっているのはコーディング中 neighborのつづり確認するのが面倒だったからです。

テーブルに置き換わってなくなりましたが、となりのボックス名を取得する関数はmeiと名付けてました。

コーディング中、ちょっとしたいたずらが、ささやかなモチベーション維持になったりします。

 

 


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。