WCE blog

早稲田大学公認 総合デジタル創作サークル 早稲田コンピュータエンタテインメント

CODE FESTIVAL 2018 参加記

「参加記」というのはエンジニア方言のようです。気づかないうちに語彙が侵食されていくのはこわいですね。

DTM班長のLgeuです。
11月17日(土)に開催されたCODE FESTIVAL 2018に参加したので、参加記を書きます。

CODE FESTIVAL 2018とは?

これです。 www.recruit-jinji.jp

予選

予選A(9/22)

CODE FESTIVAL 2018 qual A - AtCoder

500点が解けず惨敗。解答見たらDPだったので今までDPを全然勉強して来なかったことを反省しました。

予選B(10/14)

CODE FESTIVAL 2018 qual B - AtCoder

100点と200点は順調に突破。さて500点問題は……

え、これただ十字型のペントミノを敷き詰めるだけじゃん?

ぱぱぱっと実装。2回バグらせつつ22分でAC。
700点問題……はまるでわからず、3完で終了。
結果は61位。500点を早解きできたのことと、700点が難しくて解けた人が少なかったこととで思いがけず良い順位を取ることができ、本戦に進出することができました。

当日

8:30ごろに会場着。10分位かけて交通費精算を終え自分の席に着くと、朝ごはんが用意されていました。

机の上にはチームリレーのルールの紙やらWi-Fiの設定の紙やら色々なものが置いてあり、どれが重要なんだ…と手間取っていたら開会式が始まる。OPムービーに自分のTwitterIDが映ったときは胸熱でした。

机を整理してPCを準備していると「コンテストページにアクセスできましたか?」とアナウンス。待ってまだブラウザひらけてない!

そんなこんなで本戦まであっという間に時間が過ぎました。

本戦

配点は300-300-300-500-600-600-700-900-1000-1200、制限時間は3時間で、1400点以上取るとでパーカーがもらえるようです。ABCDの4完が目標ですね。

開始後、まずはAに取り掛かります。が、なかなか解けない……
自分がWAを出して焦っている中で周りが「カタカタカタカタカタカタカタカタカタ!!!!!!!!!!!!!」とさくさく解き進めていたので地獄を感じました。
その後結局3回提出してもACできなかったので、一旦諦めて次に進むことにしました。

BとCは問題なく解けて、Dを見ましたが全く開放の見当がつかないのでEを見ました。問題を眺めていると後ろからしゃくとり法みたいなことをすれば良いと気づきました。この時点では1時間以上残っていたはずです。しかし、「区間の最小値を求めるのってどうやるんだっけ…」とか本質的でないことをしばらく考えて時間を浪費し、結局セグ木をググりながら実装してバグらせていたらタイムアップになりました。

最終的に2完600点で94位でした。かなしい。後で気づいたのですが、Aは問題を誤読していました。

パーカー欲しかったです。

本戦後

昼食は3種類くらいのお弁当から1つ選んで自分の席に持っていく感じでした。
自分が取りに行ったときに残り1個になっている弁当があったのでそれを選びました。

あさりご飯がすごく美味しかったです。冷たいご飯なのに美味しい謎の技術でした。

表彰では「すごいひとはすごいんだなあ」と思いました。

A.I. Challenge

表彰の後、同じ大学の先輩であるreminさんに声をかけましたが、もふふといった感じでしたので一旦別れて会場を彷徨っていました。
しばらくの間ふらふらと漂う人になっていましたが、14:00にセッションエリアでA.I. Challengeが始まるのでそちらに着地しました。
A.I. ChallengeはゲームAIのプログラミングコンテストで、ゲームはいつぞやに流行った「2048」を対戦型にしたものでした。こどふぇす開催までの1週間ほどの期間に作品が募集されており、自分は(こどふぇす本戦参加者の中で)予選5位になっていたので決勝トーナメントに進めました。

自分のAIのアルゴリズムは、

  • アルファベータ法(モンテカルロ法は信用できなかったので)
  • 評価関数はググって出てきたものをそのまま使用(調整する時間がありませんでした)
  • 評価関数は「メインフェーズ終了後(アタックフェーズの前)」のタイミングで適用する(評価が正確になりそう・負けた判定がしやすそうなので)
  • 基本的にアタックフェーズで1つしか置かない前提で探索する(そうでないと探索空間が爆発するので)
  • 直近の自分の手のみ、2つで1つ以上のブロックを挟み込める場合(例えば、[0 4 16 0 0]という行を[2 4 16 2 0]にできる場合)を探索する

という感じでした。あまり変わったことはしていないですが、これで決勝トーナメントまで進むことができました。
実装している時間のうち体感8割がバグ修正でした。予選での対戦を眺めていると、自分のAIか相手のAIかに関わらず終了間際の動きが怪しいことが多く(まだ動かせるのに動かせない方向に動かそうとして負けるとか、ちゃんと動かせば大きい数字を消せて安全になるのにそうしないとか)、ここのバグをしっかりと直したことも良い結果に繋がったのかもしれません。
挟み込める場合の探索は作品受付の最終日に実装しましたが、これで予選でのレートが300くらい上がった気がします。

決勝トーナメントの結果は初戦敗退でした。相手が2個以上置きをばりばり使ってくるタイプだったので厳しかったです。

その後上位の対戦を眺めてAI作者の解説を聞いてはえ~となっていました。

決勝に参加したので世界に8個しかない物体を頂きました。スマホにつけて使うものらしいです。大事にします。

和エリア

同じ大学の先輩で黄コーダーであらせられるtossyさんにお声がけいただいて、早稲田生のたまり場に入れてもらいぼっちを回避しました。ありがとうございます。
reminさんがすやすや眠っていたのが印象的でした。

のんびりしながら「りんごの挑戦状」を見たりしていました。あれって本当に微塵も競プロ関係ないんですね。

Team Relay

1人1問までしか解いてはいけないチーム戦です。自分はGチームでした。
GチームにはA.I. Challengeの優勝者のさはらさんもいたのでテンションが上りました。

最初に作戦会議タイムがありましたが、自分はコミュ力不足により完全に挙動不審になっていました。

自分はA問題を担当し、1WAを生み出したり解き終わって戻って来たのを報告せずコーディングスペースに誰もいない時間を生み出したりとチームの足かせとして活躍しました。(本当にごめんなさい……)
自分の担当問題を終えて手持ち無沙汰になっていると、チームメンバーにI問題の説明をされたのでしばらく考えていました。
mod 5が3か4になるのをマージするしか得をする方法がないのと、3と4をマージするのが最も効率がいいので他との組み合わせを考えずこれを最優先に処理して良いのに気づいて、解答の方針が頭の中で定まったときにはもう残り15分くらいしかありませんでした。
チームメンバーの間では、残りの問題で解法が判っているもののうちいかに実装が楽そうなのを解くかという話になっており、新しい問題の解答の方針を共有する暇は無く、チームに貢献することはできませんでした。
最後の走者がコーディングスペースに向かい話し合うことも無くなったときに「I問題が解けた」とイキりながら話していましたが、あのときは筋道を立てた説明が全くできていなかった気がします。恥ずかしい。
sigmaさんが最後に10分もかからずF問題を実装していたのは完全にプロでした。

Gチームは最終的に6完でした。3位以内に入ったチームにはディナーの良い肉を贈呈されましたが、残念ながらGチームは良い肉にたどり着けませんでした。

チームリレーの後、さはらさんにA.I. Challengeのお話を聞くことができました。かなり幸福度が高かったです。

ディナータイム

良い肉は得られませんでしたが、寿司肉寿司寿司肉えび寿司ピザ肉という感じで最高でした。
寿司の無くなる早さを見誤ったのは失敗でした。

閉会式

ダイジェスト映像が完成していてびっくりしました。自分は最後の方に0.2秒くらい映ってた気がします。

まとめ

楽しかったです。

参加前の時点では顔を合わせたことのある人が全く居ない状態でしたが、先輩に声をかけて頂き、同じ大学の競プロerと知り合うことができました。

あと、面白いことを言う人は面白いことを言うのが上手いなあと思いました。

帰宅

Tシャツとかトートバッグとか色々もらえる上に3食ついてくるこどふぇす最高ですね。