はじめに
フューチャー Advent Calendar 2020 の11日目の記事です。
今年の4月に新卒で入社し、FutureのTechnology Innovation Group(TIG)に所属しています。仁木です。普段は土日に競技プログラミングのコンテストに参加したり、会社の競技プログラミング部に所属してバチャコンを開いたりしています。
本記事では、10/24に行われたPG BATTLE 2020で社内で3人一組の2チームで参加してきたので、チームができるまでや事前に立てた作戦、当日参加した個人の感想を共有できればと思います!2チームで参加し、16位と19位でした。
#PGBattleとは
毎年秋ごろに開催される競技プログラミングのチーム戦です。決まった時間にオンラインで問題が配信され、90分で問題セットを解き、チームの合計点数を競うというものでした。
同じ学校や会社の人で、1チーム3名を作り、3人がマシュマロ、せんべい、かつおぶしという難易度の問題セットに分かれて解く戦いでした。誰がどの難易度のセットを解くかは事前に決めておいて、会当日はチーム間で相談禁止というルールでした。
#参加を決めるまで
競技プログラミング部の先輩部員が去年、一昨年と参加していて、部内で今年も開催されるという先輩の投稿を見たのがきっかけでした。私ははじめ投稿を見たときはチームで足を引っ張ってしまうかもと思って手を挙げなかったのですが、先に手を挙げていた方々がゆるいチームでやりましょうという雰囲気だったので、参加してみたい気持ちが勝ち、手を挙げて参加してみることにしました。
#チームでやったこと
申込とチーム作り、作戦会議についてお話しします。
参加すると手を挙げたのは4月新卒4名、7月新卒1名、8月キャリア入社1名でした。キャリアの方は同じく競技プログラミング部の部員さんでしたが、ほぼ初めましての方だったので、申込やチーム作りではハングアウトを利用してお互いの自己紹介やレートを確認することから始まりました。
##申込とチーム作り
当時の申し込み期間は7/10~10/11(その後10/20へ延長されました)だったのですが、締め切りぎりぎりの金曜日にHangoutsに集まっで申込とチーム作りをしました。
チーム決めはまずレート順で並べて、上から2名ずつをかつおぶし、せんべい、マシュマロの順番で割り当てる方法で決めていきました。 その後、直近のコンテストに参加しているかどうかで少し順番をかえたりしました。
私は一番下だったので、マシュマロを解くことになりました。(チームの足を引っ張りたくないのでとてもやる気になったのを覚えています。)
申請では、Hangoutsで会話しながら登録したため、メールアドレスなど必要な情報をスムーズに埋めることができました。初対面の人もいたので、チーム名を決めるのが一番難しかったです。
当日は以下のチーム名で参加しました。私はHello Future World!チームで参加しました。Osaki Chopstick 🥢illageは、OCV(Osaki Code Village)という競技プログラミング部の名前をもじっています。お箸の絵文字は当社のロゴと似ているので好んで使われています笑
- Hello Future World!
- Osaki Chopstick 🥢illage
##作戦会議
6名中5名が初参加だったので、参加前に、それぞれ調べたことで情報共有会しようという話になりました。当日はTOPSICというプログラミング判定サービスを利用して提出するため、事前に用意された練習問題を解いて慣れておくことや、過去問を解いてきての所感などを共有しました。
特にTOPSICの使い方を調べておけたのが良かったです。注意点は以下でした
- 一つの問題が解けたら保存ボタンを押す
- すべての問題に挑戦し終わるまで最終提出しない
- 最終提出は一度きりなので、ボタンを押す前にコーナーケースをよく確認する
- 時間以内に解けないと判断した場合はすぐ最終提出する
- チームが同点の時は最終提出するまでの時間が短いチームが上位になるため
- 正確さ、解けるかどうかの見極めも重要でした
- (参加後に気づいたこと)回答時間は100分オープンしている中での90分だったようです
#自分でやったこと
私は一番簡単なマシュマロの問題セットを担当しました。過去問を見る限り、4問あるなかで、最初の3問は問題なく解けそうでした。昨年の同セットの最終問題が難しかったことと、申込が遅かったのであまり時間がなかったことがあり、過去問に関連する分野に絞って学習・復習しました。見事、去年と同じダイクストラ法の考え方で解ける問題が4問目に出てきたので当日は全問正解することができました!
参考にしたページを載せておきます。
- 2018年過去参戦記事→ https://future-architect.github.io/articles/20190513/
- 2019年過去問ページ→ https://products.sint.co.jp/q_list
最終問題の傾向アルゴリズムを復習し、当日使えそうなクラスをすぐ参照できるようにスニペット化しておきました。私の学習した内容は以下です。
- bit DP, 半分全列挙
- ダイクストラ法, 経路復元
#感想&来年は一緒にぜひ
チーム名決めや結果発表などで社内の人とわいわい出来たので、手を挙げて参加してよかったなと思っています!普段参加しているコンテストでは全完より先に時間が来てしまうので、全部解き終わって最終提出ボタンを押してゆっくりする時間ができたのが新鮮でした笑
PG BATTLEならではの面白さもあり、『自分が提出したコードが全部のテストケースを通っているか』の結果がわかるのが提出後数時間後でドキドキしながら待つところや、解説放送を見ながらTwitterで参加者と一緒に盛り上がったり、チームの人と結果発表をみて盛り上がったりできたのが楽しかったです。
当社の競技プログラミング部の部員さんはフランクに質問できたり、イベント情報を流してくれます。
私も一員として、バチャコンを企画したり、部内でHTTFの振り返り会でアルゴリズムの解説をしてみたりしています。一緒にわいわい楽しめたらいいと思っていますので、ご縁があればぜひ一緒にやりましょー