プログラミングは芸術だ!

web系エンジニアの備忘録 「プログラミングは芸術」を座右の銘として日々勉強中 最近Androidもやってます

CODE RUNNER 2015 予選B に出場しました

CODE RUNNERとは

キャリフル、チームラボ、Atcoderで協賛、運営している
短時間マラソンマッチのプログラミングコンテストです

2014年に第1回がございまして、今年は第2回目の開催となっております
基本の対象者は学生なのですが、社会人も予選は出場することができます!
ということで10月31日に開催された予選Bに出場しました!

coderunner.jp


予選Bはこんな問題

魔法の力を、ためて戦え!「Charge And Hit」

制限時間 3 時間

1. ゲーム概要
「Charge And Hit」は3人1部屋でゲームを行います。ユーザーは入室/攻撃APIをリクエストするとシステムにより各部屋に割り振られます。部屋には10匹の敵が並んでいて、ユーザーは任意のタイミングで一番前の敵を魔法で攻撃します。攻撃によって敵に与えるダメージは「魔法をためた時間」に応じて高くなります。ただし敵の体力を超えるダメージは切り捨てられて体力と等しい値になります。部屋内で与えたダメージの合計値が大きい順に室内順位がつけられ、その室内順位に応じてスコアを得ます。ユーザーは他のユーザーより多くのダメージを与えて、スコアを多く得ることを目指します。

問題の詳細は参加登録するとみることができますので、興味があるかたはぜひに!(※キャリフルの登録はしなくても問題は見れます)

去年と同様に、
予選Aは完全な個人戦、予選Bは他の参加者とのバトルという感じでした!


私の結果

f:id:gamu1012:20151101144958p:plain
name:gamu1012
rank:92
max score:30090

なんとなく目標にしていた100番以内も達成できて、満足です!
最後の10分でsocreを2000くらい伸ばせたので、大興奮でしたwww


最終的な方針

CODE RUNNER 2015 予選Bで使用したソース · GitHub

  1. 残りのモンスターの中で一番初期HPが高いやつなら、とりあえずアタック(他の2人への牽制と嫌がらせのため)
  2. ある程度HPがある的を倒せるなら倒す
  3. 倒しきれなくても、ある程度damageが与えられるなら、アタック

アタックするべきHPの値は手動でちょこちょこ変更しながら、
別コードで入った10部屋ごとの合計得点を出して、判断、調整をしていました


最後に3位だったらとりあえずアタック という ロジックを外したのと
ログを眺めながら、手動で調整用にアタックするようにしたらスコアがぐんっと伸びて、いい感じでした!
手動、最強説!

終了してから気づいたのですが、
最後まで、すべての敵を倒しきっても部屋に残るようなプログラムを書いてしまっていて、とても時間を無駄にしてまったのが悔やまれます。




所感

去年も思ったのですが、本当にCODE RUNNERは楽しい!
短時間マラソンマッチがもっと増えてくれたら嬉しいなと!
なぜか2年連続、予選Aには都合がつかず、出場できていないのが悔やまれます・・・

今回スコアを伸ばすには、他の参加者に対しての牽制・嫌がらせが大事だったみたいです。
1位のyosupoさんが他の2人がアタックしそうなちょっと手前でアタックする方針だったというお話をしており、
このロジックを実装すること自体は難しくないと思うのですが、
そういう発想が素早く思いつくのが上位なんだなーとしみじみ感じました

地頭の問題もあるかもしれませんが、そこをウダウダ言っていてもしょうがないので、
もっと経験を積んで、小さなノウハウ、テクニックを習得していきます!

運営の皆様、ありがとうございました!
来年も是非、開催よろしくお願いします!