tsukammoの収穫記

上下左右の更地にアルゴリズムを

いま、ここにしかない、出会い。(AtCoder 第一回マスターズ選手権 -決勝- で五位入賞しました。)

下記の日時に開かれた競技プログラミングコンテスト、AtCoder「第一回マスターズ選手権」の備忘録です。

  • 予選:2024/03/03(日) 13:00 ~ 19:00 (360分)
  • 本戦:2024/04/21(土) 11:10 ~ 17:10 (360分)

第一回マスターズ選手権 名札

結果

予選:41/182位、本戦:5/56位でした。※有効回答者のみカウント。
初のオンサイト出場 & 入賞ができ、たくさんの方と出会えた記念に参加記を書きます。

コンテストの特徴

第一回マスターズ選手権は、28歳以上の 2 or 3人のチームで出場が制約となっている珍しいコンテストでした。
6時間のHeuristic形式(最適解を出すのが難しい問題に対し、出来るだけ良い解を作成するコンテスト)でありながらvisualizerが提供されないことも特徴で、コンテスト中にvisualizerの自作が想定されています。

これまでの競プロのオンサイトコンテストは新卒採用の比重が大きいものばかりでしたが、今回はむしろ中途採用狙い撃ちでさらなる広がるを感じました。

チーム決め:考えたこと・やったこと

コンテストに向けて準備の時間を確保することが難しい見込みだったため、同じような状況の方と組みたいなと思っていました。以前の企業対抗 Team Battleで組んだtanzakuさんと同じチームで働いているomiさんをお誘いしました。(お二人ともHTTF(2018本選2019本選)が切っ掛けで入社されたので、個人的にアツいメンバーでした。)
チーム名「Optimization I.G」は、tanzakuさん命名です。所属部署のTIG(Technology Innovation Group)とSAIG(Strategic AI Group) の共通文字を残す「◯IG」で良さそうな感じにしました。

予選 3/3:考えたこと・やったこと

「予定はおさえる、特別な準備はしない、お仕事諸々で難しくなったらごめんなさい、の温度感でできればと思います。決勝に滑り込めるのが目標。」を掲げ、チーム内で情報はdiscordを繋いでシェアしつつ、特に役割を決めずに各々が独立した取り組む方針でした。

実際の予選では、問題見た瞬間visualizerが必要だ。。。となって、私が担当しました。事前に準備をしていなかったのでgridを簡易に描画する手段や知見もなく、canvas要素に対して素の JavaScript でゴリゴリ実装しました。動きが見えるものができるまでにコンテスト時間の半分以上かかってしまったので申し訳なかったです。
tanzakuさんの少し先のターンまで見た貪欲解法で50位以内に入れて、本選進出権を得ました。

本戦 4/20:考えたこと・やったこと

前日の4/19(金) が部署の懇親会でした。強い意志で帰宅しました。

会場までは40分くらいで着けるのですが、当日起床してからノートPCのセットアップをしていたのでギリギリの到着になりました。一人ひとつ、サンドイッチとinゼリーが配られました。1チーム3人が50チーム以上参加しているため、会場は多分3つくらいの部屋に分かれていました。

決勝会場

11:10~コンテスト開始
問題が結構複雑。推定 + インタラクティブ + grid問題じゃない。同じルールで設定が異なるABCの3つの問題が存在。予選以上にvisualizerが欲しくなる問題だったので、私が作成担当に。tanzakuさんが貪欲アプローチで取り組み、omiさんが別アプローチを検討していく方針になりました。
visualizerの作成は相変わらず素の JavaScript でゴリゴリ実装しました。grid形式じゃないこともあり他チームとの差異は縮まったと思います。予選と同じく3時間半ほどで完成しました。

1時間40分経過時のtanzakuさん解(A問題seed=0)。

初期のtanzakuさん解

実はA問題は曲者だと感じました。風が強く壁が遠くて計測誤差は大きいので中々正確な位置を求められず、正の得点を取るまでのハードルが高いケースです。 4時間40分経過時、tanzakuさんが初提出してA問題で 262,656点。
5時間20分経過時、omiさんのシミュレーションのバグが取れ、B問題で 320,058点。C問題で 152,506点。
omiさんは複数のシミュレーションを走らせ、フィードバックから該当しないシミュレーションは削除していく方針とのことでした。A問題だと誤差が大きすぎて上手く効かなかったみたいですが、壁が多いB,Cが比較的得意だったようで、偶然tanzakuさんのA問題とomiさんのB,C問題で住み分けできました。

その後、omiさんが詰めて点数を上げ。総合五位で入賞(リクルート賞)できました。突出してスコアの高いケースはなく、満遍なく取れたのが良かったようです。

  • A:262,656点、最終14位の点数。
  • B:418,190点、最終12位の点数。
  • C:193,582点、最終7位の点数。

終結

懇親会

17:20~20:00は、懇親会で盛り上がりました。
なんとかスポンサーの企業ブースに寄らせようと、ブースに行ってスタンプを集めて初めてアルコールが飲めるという画期的な制度もあり、企業ブースは結構盛り上がっていました。企業側も社員の競プロerや理解のある方をスタッフとして参加させてた印象で、特にTHIRDさんは井上社長が率先して会社のアピールをされていて、常に人集りができていました。

懇親会の料理

懇親会中(2,3次会含む)はたくさんの方に出会えました。(多分会った順、決勝参加者じゃない方は載せていいかわからないので省略、もし漏れていたら土下座。)
AT274さん、spihillさん、LayCurseさん、hamkoさん、pachicobueさん、sky58さん、shindanninさん、kosakkunさん、yunixさん、hasiさん、fmhrさん、komori3さん、kysさん、tomerunさん、saharanさん、tsutajさん、monkukuiさん、Taiyoさん、koyumeishiさん、uwiさん、smikenさん、yupiteruさん、takytankさん、simanさん、colunさん、tokoharuさん、theory_and_meさん、optさん、MathGorillaさん、ebicochinealさん、threecourseさん、ryo_nさん、sasayuさん、momoharaさん、daijuさん、maeda3さん、terry_u16さん、drkenさん、tempura0224さん、blue_jamさん、takumi152さん、neterukunさん、berryさん、rabotさん、zachさん、ToastUzさん、

振り返り

コロナでオンサイト予定が吹き飛んで以来、またとない機会で結果も思い出も残せて最高でした。
このようなコンテストを開いてくださったAtCoderとスポンサード企業の皆様、本当にありがとうございました。来年以降も「まだ、ここにない、出会い。」を期待しています!

調子にのって持って帰った