概要

キャリフル主催の学生プログラミングマラソンCODERUNNER 2014の本選に参加した。 CODERUNNER 2014は、予選を突破した総勢100人の学生プログラマーが、3時間でゲームAIを作成し、 獲得点数で競うものである。

予選

予選はAとBの2回行われ、予選の総合100位までの人が、本選に招待された。 予選Aで学生20位で、総合24位で本選に参加した。

予選A

予選Aは、「Dic Hack」という辞書ゲームであった。

1~8文字のA、B、C、Dで構成される単語が、合計1000個 用意されており、それぞれに得点つけられている。 50文字までの文字列を作成し、その文字列に含まれる 単語の種類で得点が決まるというものである。 用意されている単語と得点は公開されていないので、 得られた点数から単語を予測して、高得点を取れる文字列を 探さなければならない。

3時間という短い時間であり、重い実装は難しいため、焼きなまし法というアルゴリズムを利用した。 まず得点の高い15文字の文字列を乱数を利用して探し、 見つけた文字列の前後に5文字ずつ、得点が高くなるようにつけていというものだ。 結果は、2432点で総合24位、学生20位であった。

予選B

予選Bは、「The Rebellion」というRPG風のゲームであった。

プレイヤーは、各部屋に2~3人割り振られ、1体のモンスターと戦う。 モンスターを倒すと、次の部屋にランダムで移動する。 プレイヤーは100種類の技の中から一つ選び敵に攻撃を行う。 モンスターによって、技で与えられるダメージが異なる。 与えた合計ダメージで競うというものである。

誰がどの技を使い、どれだけのダメージを与えたかのログを json形式で取得できたので、C++用のjsonパーサを作成し、 読み取れるようにした。 そして、部屋情報と過去ログを見て、ダメージの大きい技が特定できるなら それを、できないならまだ使われていない技を使用するというプログラムを組んだ。

結果は、6945459点で総合86位、学生66位であった。

本選

本選は、「SummonerWars」というモンスター召喚ゲームであった。

プレイヤーは一定時間ごとにモンスター召喚用の石が配布される。 石の組み合わせでモンスターを召喚することができ、 召喚したモンスターの点数の合計が、最終的な得点となる。 また、プレイヤーは石を市場に出して、他プレイヤーと石の交換をすることができる。

作ったAIは、モンスター召喚条件のファイルをソートして、 得点が高いものを貪欲的に選んで召喚するものである。 石の交換は、今自分が持っている石より高価な石が交換できるなら交換するようにした。 しかし、得点が高くても召喚石とポイントの効率が悪い モンスターがいるため、あまり高い点数を得ることができなかった。 今回の敗因は、序盤に効率を考えずに召喚石を消費してしまったせいである。

コードをあまり書かず、手動で召喚と交換を行って 上位を取っている人もいたため、 仕様を早く読み取り、ゲームの本質を理解できることが重要であった。

結果は、40014331点で、74位であった。