freeeの開発情報ポータルサイト

PG BATTLE 2022 に参加しました

はじめに

こんにちは、2022年4月にfreeeへ新卒で入社したyellowです。現在は、Software Engineer in Qualityチーム(通称:SEQチーム)で自動テストの運用・改善や基盤開発などに携わっています。

先日、社内の競技プログラミング部のメンバーでチームを組み、2022年10月末に開催された、企業・学校対抗プログラミングコンテスト「PG BATTLE 2022」に参加しました!この記事では、コンテスト当日までの様子や参加した感想などを中心にお伝えしたいと思います。

PG BATTLE とは

PG BATTLEは、1チーム3名による企業・学校対抗のプログラミングコンテストです。大まかなルールは以下の通りとなっています。

  • 「企業の部」「大学&大学院、高専、専門学校の部」「高校、中学、小学校、その他スクールの部(18歳以下)」の部門内で競い合う
  • 同一組織内から3名で1チームを組む(同一組織内から複数チーム参加可能)
  • 「かつおぶし」「せんべい」「ましゅまろ」の3つの難易度の問題セットがあり、チーム3人で1つずつ担当する
  • 「かつおぶし」>「せんべい」>「ましゅまろ」の順に難易度が高く、4問100点満点の計300点満点の問題構成(より堅い方が難しい)
  • 制限時間は90分で、解答の正解・不正解はコンテスト終了後にしか分からない
  • チーム内の相談は禁止
  • 結果は、3人の合計点数で競い合う。同一点数のチームがあった場合は、解答時間の合計が短いチームが上位となる

チーム結成からコンテスト前日まで

今回は、競技プログラミング部部長のberry、副部長のJJ、部員のyellowの3人でチームを組み、「おおさき sWAllows」というチーム名で参加しました! チーム名の由来は、オフィスが「大崎」にあること。会社のロゴの「つばめ」。競技プログラミングで不正解を「WA」と表現すること。から名付けています。

参加メンバーとチーム名が決まったところで、次に誰がどの問題を担当するのかを決めないといけません。私達のチームでは、直近のAtCoder*1の戦績が良い順で担当を決定した結果として、以下の選出となりました。

  • かつおぶし担当:berry
  • せんべい担当:yellow
  • ましゅまろ担当:JJ

ここまで決まれば、後はコンテスト当日までに、ルールや、解答提出までの流れの確認と、過去問を解くなどの事前準備をするのみです。 確認系は部活の時間にチームで集まって確認をし、過去問などは個人で解いていく流れで準備を進めました。

ルール確認の中で、ひとまず戦略も決めました。結果の順位に影響があるのは、「チームの合計点数」と「総解答時間」です。制限時間が90分の中で、これ以上解けないと判断した場合は、その段階で問題を解くのを諦め、早めに提出を終えた方が順位が高くなる可能性があります。そのため、「問題を出来るだけ多く解きたいけど、解けなかった場合は早めに提出した方が順位上がるしなー」という気持ちもあり、結構引き際を見極めるのは難しいです。しかし、今回は初めての参加なこともあったので、「順位は気にせず、制限時間を目一杯使って楽しんでいこう」という戦略で参加することにしました!

コンテスト当日

コンテスト中はチーム内での相談が禁止なため、各々の環境で黙々と解いていくことになります。

私が担当したせんべいは、3問目までは比較的すぐ解答が思いつき、25分程で解き終えました。しかし、4問目が非常に難しく、残り10分の段階で解法の方針が立たなかったため、4問目は諦めることにしました。 「一度しか提出ができない」かつ「解答の正否はコンテスト終了後にしか分からない」ルールだったため、解けたであろう3問に関しては、提出前の確認は入念に行いました。

コンテスト終了後、解答の正否が開示され、得点を見ることができます。解けたはずの問題が不正解だったなんてことがあれば非常に悔しいため、開示の瞬間の緊張は凄まじかったです。 どれだけ解けたかをslackでワイワイ話し合い、1週間後の結果発表を待つことに...

結果発表

結果発表当日、結果発表があるということを忘れていた中で、一件のメッセージが...

pgbattleで30位の飛び賞に選ばれたことを伝えられたslackメッセージ

合計:180点、解答時間:255分59秒で企業の部 30位/190位 でしたー!

スポンサー賞(飛び賞)を受賞すると、チーム人数分の賞品を貰うことができます。各々で賞品を選び、以下と交換することになりました。

  • berry: A5 黒毛和牛 選べるカタログギフト A5黒毛和牛を焼いている様子
  • JJ: グレゴリー バックパック イージーデイ(ブラック)
  • yellow: 図書カード(1万円分)

この記事を執筆しているyellowは、写真を見て黒毛和牛にすれば良かったと後悔しています。

終わりに

飛び賞ではありますが、競技プログラミングで何か賞品を貰うことは初めてだったので、嬉しかったです。飛び賞が設定されていると、誰でも賞品を獲得できるワクワク感があっていいですね。

企業部門がある競技プログラミングのコンテストは珍しいので、来年もまたチームを組んで出たいです。今年は、1チームの参加でしたが、来年は複数チーム組んで、もっとワイワイ参加できると嬉しいなー。