読者です 読者をやめる 読者になる 読者になる

tookunn’s diary

主に競技プログラミング関係

Codingame Fantastic Bitsに参加

Codingameというサイトで行われた「Fantastic Bits」というコンテストに参加しました。

今回、事実上初めて長期間コンテストに出た && これから長期間コンテストに出始めようかなと思った ので参加した内容を記録した方が良いと思い、軽く記事にします。

ちなみに提出コードは可読性も良くないし、現状バグも多くあったりするので公開はしてないです。

このコンテストは8日間の間行われたので、覚えている限り、適当に書いていきます。

1日目

・コンテストが開始されたが、開始時刻が日本時間の26:00だったので開始直後には参加せず。

・昼間ぐらいからやっと参加できる状態になったので、最初にざっと問題文を眺める。

・初めての長期間コンテストの参加でノウハウが分からずだったので、とりあえず問題文の量に圧倒されながら翻訳しつつ、概要をgoogle documentにまとめていく。

・ふわっと概要を把握後、まず移動処理ではthrustをMAXで2体のWizard各々の一番近いSnaffleを追いかけるようにして、投げる処理ではGoalの中心座標(x,y) = (0 or 16000, 3750)に投げるようにして提出。

・提出したらWood League1に昇格した。

2日目

・このリーグからBludgerというお邪魔要素が追加された。

・Last Battlesをずっと眺めていたら、自分の2体のWizardが同じSnaffleを追いかけてWizard同士が衝突していたのを発見してよろしくないなと思った。

・なので、同じSnaffleを追いかけないように、同じSnaffleを選んでしまった場合Snaffleとの距離が短い方を優先して、距離が長い方は2番目に近いSnaffleを追いかけるようにした。

・その時点で提出したらBronze Leagueに昇格した。なおBludgerに対する処理はほとんど書かず...。

3日目

・このリーグからは4つの魔法が使えるようになった。

・概要を眺めた感じ、SnaffleをWizardに引き寄せる"ACCIO"という魔法が良さそうだったので、これを使おうと決意。

・使いどころはいずれかの敵WizardがSnaffleを掴んでいたら(正確には敵WizardとSnaffle間の距離がSnaffleを掴んでいると思われる距離の場合)"ACCIO"を使う という風にした。

・そして、提出してSilver Leagueに昇格

4日目 ~ 7日目

・ここからは色々「これ入れたら強そう(こなみ)」みたいな動きを入れてみて、League Bossと戦わせて余裕で勝てるまで実験して、考え直して、実験して...を繰り返して過ごす。

・あと上位勢のAIの動きを見て、なんでこんな細かい動きが出来たり、まっすぐ"FLIPENDO"でGoalにSnaffleを入れたりできるんだろうと思いつつ、考えて終わった

・そして7日目に提出してないが、Gold Leagueに昇格してた。

8日目

・頑張ってTシャツもらえる可能性がある250位圏内に入りたかったので、色々悪あがきをしたり、無駄にSubmitして順位を下げたりしてコンテスト最終日を満喫

・そして、コンテスト終了。

・Gold League内では 450ぐらい / 558人中、 全体順位は602位でした。Tシャツ圏内はさすがに難しかった。

全体の感想

・長期間コンテストに初参加だったので分からないことも多った。しかし、いつもやっている短時間のコンテストと違って気持ちの切り替えが何回も出来たりして精神衛生上かなり良くてあんまり途中で投げ出すことが少なかったのが個人的にはOK

・基本if文の処理が多くて,探索らしい探索処理は書いた覚えがないので、他の強い人はちゃんと探索処理とか書いているのかなと思った。

・今回の順位は全体の参加者の半数以上よりは良かったはずなので、よくやったと思いたい。

・シュミレータを作っている日本人参加者を観測して,自分も作ろうかと思ったけど簡単そうではなかったのでやめた。(そのうち他のコンテストで自作シュミレータが必要になる時が来そう)

・CodingameのコンテストはゲームAIのコンテストっぽいのでマラソンマッチ系の導入としては良さそうだった。(ちゃんとゲーム画面がVisualizeされていて試合風景を見るだけでも楽しかった)