CODE FESTIVAL 2017 参加記

CODE FESTIVALは昨年に引き続き2回目の参加である。 昨年は特に何も書かなかったが今年は最後の参加になるはずなので記録しておこうと思う。

予選

CODE FESTIVAL 2017 qual A - AtCoder

予選Aで大変調子が良く、4完、116th、レート1847→1979という結果で本戦進出を決めた。 昨年は定員が倍以上だったのに予選Cのギリギリで通過だったので素直に嬉しかった。

DAY 1

本戦

CODE FESTIVAL 2017 Final - AtCoder

何だかんだでレートが1924まで下がっていたが、パーカー獲得と黄コーダー昇格を本戦の目標とした。 しかし結果はA、B、Cの3完、パーカーは獲得したがレートは据え置きとなった。 あまり満足はしていないが、レートが実力相応であることが分かった。

成績: 1200点 (40m12s) 81st Performance = 1924

反省

  • D問題で、「O(N^{2})のDPっぽい」「H_i+P_iの小さい順が良さそう」という直感を得たが、 それらが結びつかず解法に至らなかった。もう少し整理して考察を深めるべきだった。
  • F問題が解けそうな気がしてこだわり過ぎてしまった。

大陸対抗トークライブ

聞き流しながら本戦のD問題を通した。

休憩

フードコーナー

スケジュール表に書かれた「お寿司、ピザ、お肉と「プロコンメシ」3種の神器が勢揃い。」の意味はよく分からなかったがいずれも美味しかった。あまり焦らなくても確保出来たのも良かった。

コネクションハント

今年初登場の企画。1つの質問を決め、他の参加者から回答を集める。 私は「好きなプログラミング関連の本は?」という質問を20人に訊いた。 最頻値は予想通り蟻本で5名。 次点はアルゴリズムイントロダクション(CLRS)の3名であった。 その他知っている本も知らない本も多く集まってなかなか面白かった。 他の参加者に話しかけるきっかけを作るという意味でも良い企画だったと思う。 ただし人の顔と名前を覚えるのが致命的に苦手なので全く覚えられなかった。 20人集めた賞品としてタンブラーを獲得した。

エキシビジョンマッチ

正直付いていけないので本戦のE問題、F問題を通した。 海外勢が強かった。

チーム顔合わせ

DAY 2のチームリレーのチーム分けが発表され、顔合わせと自己紹介を行った。 私はksun48、mjhun、satashun、pachicobue、PIandS、wafrelka、gazelle、pekempey、Juyiと共にTeam Bに割り振られた。

DAY 2

少し会場に早く着きすぎた。会場入りFirst Acceptを得た。

暇だったのでテンプレートテンプレート引数について調べて新しいコードテンプレートを作った。

template <class T, template <class, class> class C, class charT = char>
void vdump(const C<T, allocator<T>> &v, const charT* delimiter = ", ",
           ostream &stream = cout) {
  copy(v.begin(), v.end(), ostream_iterator<T>(stream, delimiter));
  stream << endl;
}

トーナメント戦

本戦順位の近い人同士で3ラウンドの勝ち抜き戦を行う。私はGroup5に振り分けられた。 1ラウンド30分~40分で2問、部分点の多い問題が出題される。 昨年はRound1で0点で敗退したので、今年は積極的に部分点を取りに行く方針で臨んだ。

Round1

CODE FESTIVAL 2017 Elimination Tournament Round 1 (Parallel) - AtCoder

とりあえず両方の問題を読み、C問題の全探索を投げることにした。15分かかってしまったが200点を獲得。 その後はD問題の部分点を取りに行こうとしたが実装が間に合わなかった。

結果として、200点 (15m13s)、18人中6位でRound2に進出した。

Round2

CODE FESTIVAL 2017 Elimination Tournament Round 2 (Parallel) - AtCoder

同じく両方の問題を読み、A問題の部分点を取りに行くことにした。 まず第一の部分点(100点)を取ったが、直後に同じ方法で第二の部分点(100点)を取れることに気が付いて書き直した。 ここはもう少し考えて最初からまとめて解くべきであった。 その後は一度B問題を考えたが、すぐに実装出来ない気がしたので再び問題Aを考えた。 第三の部分点の解法を提出したつもりだったが通らず、そのまま終了してしまった。

結果、200点 (19:23)、10人中7位で敗退した。 結果論だがB問題を解きに行った方が良かったかもしれない。

Round3 (open)

CODE FESTIVAL 2017 Elimination Tournament Round 3 (Parallel) - AtCoder

一応問題は読んだが主にRound1、Round2の問題について考えていた。

総括

積極的に部分点を取りに行くという戦略はまあまあ上手く行ったと思う。 あとは単純に考察力や実装の速度が足りなかった。

昼食

三種類の弁当の中からちらし寿司を選んだ。美味しかった。

三宅陽一郎氏トークライブ

CODE FES 2017 講演資料

CODE FES 2017 講演資料(後篇)

SQUARE ENIXのAI Researcherである三宅陽一郎氏の講演。 ゲームにおけるAIの構造が分かりやすく解説されていて面白かった。

チーム対抗早解きリレー

Code Festival Team Relay (Parallel) - AtCoder

開始前

昨年は自分の担当が解けずに足を引っ張ってしまったので、とりあえず自分の問題を解くことを目標とした。

私たちのチームはまずすべての問題を本戦の順位に従って1人1問割り当て、必要があれば交換するという方針を取った。 私はチーム内で8番目だったのでC問題を解くことになった。

また、計算用紙を1枚使って、各問題の進捗状況(解法が分かった、デバッグ中、Accepted等)を管理することになった。

前半

開始直後、全員にそれぞれの担当の問題を配った…が、封筒に英語の問題文が入っていなかった。 少々焦ったが他のチームにも配られていなかったようなので、海外勢はチームPCで問題文を読むことになった。

私は予定通りC問題を読んで、すぐに解法を思い付いた。 A問題とB問題をJuyiとpekempeiがそれぞれコーディングしに行っていた(と思う)ので、紙の上で計算し、その後コーディングエリアに向かった。 1度目の提出が13m50sだったが、色々と間違えて結局3回WAを出した。 3回目の後はwafrelkaに協力してデバッグしてもらい、4回目の提出(32m20s)でようやくACした。

余談だが、3回目の提出の時、Windowsキー+数字でアプリケーションを切り替えようとしても新しいウィンドウが開く、カーソルの移動が範囲選択になるなどの現象に見舞われた。 焦ってChrome上でEscを押したらChromeのタスクマネージャーが開いて更に焦ったが、Shiftキーが誤反応していることに思い至り、Shiftキーを連打したら解消された。

後半

C問題をACした頃にはほとんどの問題が解法が分かっているかデバッグ中になっており、自分に手が出せる問題が無さそうであった。 一応デバッグ中の問題を読んだりしながら、ゴミの回収などの雑用をしつつ、コーディングエリアが空かないようにキューの管理に努めた。

これも完全に余談だが、隣のTeam Aにふと目を向けたらtouristがコーディングエリアで「お手上げ」のポーズを取るという貴重な光景を目撃した。

チームとしては最終的にmjhunが残ったH問題をACし、84m00sで全完、4位となった。 徐々にチームの士気と一体感が高まっていくのを感じ、とても楽しかった。

反省

WAの原因 * 不等号の向きを間違えた * 二分探索の範囲の更新を間違えた * 二分探索の範囲の初期値が狭すぎた

1つ目はともかく、2つ目と3つ目は二分探索で自分がやりがちなミスなので十分に気を付けるべきだった。

それぞれのデバッグのコーディング時間はそんなに長くなかったと思うが、早く解こうとしてWAを出して結果的にコーディングスペースを占有してしまった。

良かった点

時間はかかったがちゃんと自分の担当問題をAC出来た。 後半雑用しか出来なかったのは実力上仕方ない部分が大きいと思うが、雑用としてはそれなりにいい仕事が出来たのではないかと思う。

総括

とても楽しかった上、勉強になった。しかし、問題が解けなくて悔しい思いをしたので、今後も時間の許す限り精進を続けたいと思う。

関係者の皆様、ありがとうございました。