CODE RUNNER 予選B
予選B問題
問題はこんな感じでした.
魔法の力を、ためて戦え!「Charge And Hit」
「Charge And Hit」は3人1部屋でゲームを行います。ユーザーは入室/攻撃APIをリクエストするとシステムにより各部屋に割り振られます。部屋には10匹の敵が並んでいて、ユーザーは任意のタイミングで一番前の敵を魔法で攻撃します。攻撃によって敵に与えるダメージは「魔法をためた時間」に応じて高くなります。ただし敵の体力を超えるダメージは切り捨てられて体力と等しい値になります。部屋内で与えたダメージの合計値が大きい順に室内順位がつけられ、その室内順位に応じてスコアを得ます。ユーザーは他のユーザーより多くのダメージを与えて、スコアを多く得ることを目指します。
序盤
最初はとりあえず,3秒に1回殴るプログラムを書いて動かしながら方針を考えてました.これだけでも,最序盤は2位ぐらいまでいっててビビる.
メンテナンス前(開始1時間ぐらいでメンテナンスがあった)
Info APIからjsonを貰ってくるのに悪戦苦闘してたら時間が結構経ってしまった.
敵を倒せるなら殴るに変えてたら,一気に50位ぐらいまで落ちた.HPが高い敵を狙う人のカモになっていると気づく.
メンテナンス後
以下が最終的な方針.
1. 残りの敵の中でHPが上位30%の敵をリストに入れる
2. リスト内の敵が全て倒されていたら,上と同様にリストを更新
リスト内の敵が目の前に来た時
3.1. パワーがHPの7割を超えていたら殴る.
3.2. friendsの最大パワーが敵のHPの7割を超えていて,自分のパワーが3e7より大きければ殴る.
1~3をInfoを0.2秒ごとに貰ってきて繰返していた.
書いたコード: qb2015.py · GitHub
結果
10位 (∩´∀`)∩ワーイ
Ranking: http://graph.coderunner.jp/max.html
初めて良い感じの順位を取れてめっちゃ嬉しい.
本戦もこの調子でいけると良いんだけどなぁ...
反省
1位の方が言っていた「必ずルーム1位なら倒す」を思い付いていれば,もう少し伸びそうだった.
「後ろに並んでるHPが高い敵を狙って目の前の敵を誰も殴らない現象」が頻発する前に上位に抜け出せたのが大きかった.