ごりちゃんがゆく

競プロをするゴリラの精進記録

CODINGAME SPRING CHALLENGE 2021 参加記

www.codingame.com

コドゲ参加しました!参加記を書きます!

結果

2069th
全体2069位、シルバーリーグ内235位 でした!!

あわよくばゴールド入りしたかったけど、かないませんでした(><)

工夫したこと

ぶっちゃけあまり有用なことは書けないのですが、六角座標の持ち方は自分なりに工夫したつもりなので下に書きます

六角座標の持ち方

フィールドが六角形の座標系でしたね。
普通の2次元座標 (x,y) みたいなのでも扱えるのですが、今回のゲームでは6方向(3軸)に木の影が影響してくるので、(x,y,z) の3軸になるように座標を振ってみました。

嬉しい性質がありました

  • 外側の座標ほど  |x| + |y| + |z| の値が大きい
    • この値が 04 だと richness3
    • 68 だと richness2
    • 1012 だと richness1
  • 座標の値から行(列?) ごとにグループ分けができる
    • 横方向 (x軸に沿った方向) は y+z が一定
      • 上から1段目は y+z=9, 2段目は y+z=6, ... 以下3刻み
    • 同様に y軸に沿った方向は x-z が一定
    • 同様に z軸に沿った方向は x+y が一定
  • 隣接するセルは  |x-x'| + |y-y'| + |z-z'| = 4 となる
    • (残念ながら今回この性質は使いませんでした)

今回やったこと

  • 毎ターン possible_action の中から、評価関数が高いactionを選択していました
  • つまり今回は評価関数しか作ってないです
  • 評価関数の概要
    • 基本は COMPLETEGROW (2→3) → GROW (1→2) → GROW (0→1) → SEEDWAIT の順に優先 (例外あり)
      • COMPLETE 優先とはいえ、刈れるときに刈るという意味ではなく、条件にあえば必ず刈るという意味
      • 条件→ 6本以上生えている or 35点以上負けている or 刈れる木の本数が残り日数以上
    • この基本値に加え、上記の六角座標をもとにした位置の評価を加減算していました
    • 位置の評価の概要
      • 基本は、自分の木が同じ軸に被らないよう、分散させたい気持ちでした
      • 3軸の行(列?) ごとに、自分の木があれば重みをつける (size + 1 とした)
      • 軸ごとの重みの合計をセルの数で割り、軸の密度とした (上から2段目であれば 6 で割る)
      • 密度を3軸ぶん足し合わせて定数を掛け、中心からの距離 (  |x| + |y| + |z| ) を足した
      • この値が小さいほど優先度が高い (密度が低いか、中心に近いほど「良い」)

他細かい調整はしたけど大体はこんな感じです!

できなかったこと

  • 先のターンを読んだり、相手の行動を読んだり、探索っぽいこと
  • 相手の状態や木の配置を評価に加える
    • 小一時間でやってみた感触は、よくなりませんでした
  • 影の考慮とか

今後の抱負など

  • 秋も出たいです
  • 時間をもうちょっと捻出します
  • コドゲ3回目ですが、まだゴールドリーグに達したことがないので、次はゴールド入りたいです
  • ゲーム的な戦略をもっと観察しないと強くなれない気がするので、そこもうちょっと頑張ります