見出し画像

【PG BATTLE 2023】エンジニア3名でコンテストに参加してみた!

株式会社メンバーズ DevOps Lead (デブオプスリード)カンパニーの松崎です。AtCoder では ID: allegrogiken です。2019年の春からほぼ毎週コンテストに参加している程度の競技プログラミング・フリークで、普段はD言語を使って参加しています。

PG BATTLE は概ね AtCoder の団体戦・・・ということで、前々から参加してみたいと思っていたのですが、メンバーも機運も集まらない状態を2年ほど繰り返していました。今年は草の根活動を頑張り、チームとしてもスポンサーとしても参加できました。改めて感謝の念を表明しつつ、大会までに準備したことと実際の参加記録を書き残していこうと思います。

チームのレベル感について

2023年10月時点での AtCoder レーティングはそれぞれ「水、茶、茶」の3名チームになりました。レーティングが高い順に「かつおぶし」「せんべい」「ましゅまろ」を割り当てる、シンプルな貪欲法で難易度をアサインしました。

大会までの準備活動について

過去問にトライして相互レビューの会

とりあえず「みんなで過去問を解こう!」という話になったものの、提出できるジャッジシステムがあるのか?その辺が分かりませんでした。とりあえず GitHub上にリポジトリを作成し、Pull Request を提出とみなして人力レビューをジャッジの代わりにしよう、ということになりました。

相違レビューの様子

上のような形での相互レビューを1人100点分の問題に対して行いました。実は TOPSIC のシステムで過去問のジャッジができることに後で気づいたのですが、、この相互レビューはそこそこ学びになったのではないかなと思います。

TOPSICシステム上でのリハーサル

大会直前のタイミングで 2022 年の問題に対してリハーサルを実施しました。AtCoder とは提出のシステムが違うので、TOPSIC 上でのリハーサルは強くお勧めします。

本番での作戦会議

リハーサルの後に、本番ではどのような時間の使い方をするか?という作戦を決めました。
私たちのチームでは「解いた問題は1問ずつ見直しを行い、次に行ったら振り返らない」「残り30分程度で解き方すら分からない問題に遭遇したら飛ばす」という2点を明確に決めました。(なお、作戦名は「ウォーターフォール作戦」でした)

メンバーそれぞれの感想

ここからはメンバーごとの軽い自己紹介と、参加した結果・感想をお届けします。

ましゅまろ担当

マシュマロのイラスト画像

ましゅまろを担当した谷村です。昨年あたりにAtCoderに誘われ、1年かけてようやく入茶したばかりの新米コーダーです。
初めに過去問の1,2問目を見た時はAtCoderのA,Bよりもかなり平易で、プログラム勉強し始めの頃を思い出しながら解いていました。
しかし、自分の実力だと3問目あたりで解けない時もあったので、今回は「3問目までは確実に取る!」を目標にしていました。

今年も1,2問目はかなり平易で10分ほどで終了し3問目に入りました。
3問目は、2進数と10進数の入力の大小比較で、単純に実装を進めサンプルケースも通ったので10分ほどで完了しました。(後で気づくのですが、これが結構ラッキーパンチでした。)
4問目はDP使うんだろうな〜という雰囲気は分かったのですが、結局DPも使いこなせなかったので、時間を優先し残り30分のタイミングで提出しました。

結果は1, 2, 3問目の3完です。

そして終了後にTwitterなど見ていると、3問目は実は入力の桁数が大きい場合に、プログラミング言語によっては通常のInteger型(整数型)では桁数の上限でエラーが起きる所が落とし穴だったと知りました。
自分はこのケースは思い至らなかったのですが、Rubyで参加していたため、Rubyの整数を自動で大きい桁数の型に切り替えてくれる機能のおかげでACしていました。Rubyありがとう!
このケースは指定されている最大桁数の入力を一度でも試せば分かるものなので、結果は嬉しかったのですがテストの不十分さが反省点として残りました。

せんべい担当

せんべいのイラスト画像

せんべいを担当した吉村です。AtCoderの経験1年でレーティングは700の茶色です。そろそろ入緑したいと頑張っています。
せんべいの過去問を解いた感想としては、難易度順に見て下二問は解けそうで3問目までくると時間的にも実力的にも解けるか五分五分だなと感じました。
本番では2問は確実に解き3問解けたら嬉しいというモチベで挑みました。

さて、今回の問題ですが1問目は結構簡単でAtCoderではAかB程度でアルゴリズムの勉強をしていなくても解ける難易度なので省略します。
2問目は、例年通り難易度3の問題でしたがとても難しくかなり苦戦しました。
問題の簡単な説明をすると A, B, C, ? の文字列が与えられるので ? がランダムに A, B, C になる場合、その文字列の中で"ABC"が何個できるか期待値を出力せよ、というものです。
解き方としては、DPで解く問題なのですが解き方を知っていれば解けるというわけではなく、工夫が必要な応用問題という印象でした。AtCoderで出るならD,E問題で出るくらい難しいと思います。(個人的な意見です)

結果は結局2問目は解けずに1問だけACでした。

チームメイトに申し訳ない気持ちになっちゃいましたが、これだけ難しい問題なのでせんべいを担当した適正レベルの方は自分と同じように苦戦したと思います。
また、30分くらい詰まったら飛ばすという作戦も頑張れば解けそうからと挑み続け制限時間をフルに使いました。順位に響くと思いましたが、幸運にもせんべいの4問目に問題が見つかりせんべいの方のみ時間は除外されたので救われました。
後日談ですが、かつおぶしを担当した松崎さんにもこのせんべい2問目を解いてもらい、これは難しいとお墨付きをもらったのでちょっと救われました。簡単な問題なのに解けないと相当凹むので...

かつおぶし担当

かつお節のイラスト画像

かつおぶしを担当した松崎です。AtCoderはAlgo水・Heuristic青です。2022年分のリハーサルでは20点しか取れなくて「水色にかつおぶしは荷が重すぎませんか??」というお気持ちになっていました・・が、本番では 1, 2, 3 問目でACを取ることができました!

問題の傾向としては、AtCoder Beginner Contest の D, E 問題か、AtCoder Regular Contest の A, B 問題か、あるいはその中間か、くらいの印象を受けました。3問目までの難易度はフラットだった印象です。

4問目を開いた時点で残りは30分を切っていました。フワッとしたアプローチは浮かんだものの、細部で実装が詰めきれないことがほぼ明らかでした。決めた作戦に従って潔く諦め、提出を行い早めのコーヒータイムを楽しみました。

本大会は AtCoder の通常のコンテストと異なり昼の13時開始だったので、開始の1時間前は近くの公園を散歩したりしてコンディションを整えやすかったです。お昼のコンテストも良いかもな〜と思いました。

最後に

以上、参加者それぞれの感想をお届けいたしました!楽しさや辛さ、緊張感などが伝われば幸いです。
PG BATTLE はチーム戦ではあるものの「個人戦が3人分」というタイプなので人数さえ揃えられれば他の準備はほとんど必要ありません。そういった意味では、とても参加しやすいイベントではないかなと思います。

主催のシステムインテグレータさん、システム・問題提供のAtCoderさん、その他関係者の皆様、開催ありがとうございました!来年も参加メンバーが集まればぜひ参加したいと思いますので、どうぞよろしくお願いいたします。


編集担当より

DevOpsLead (デブオプスリード)カンパニー 広報の濱松です!
本記事のサムネイル作成や投稿管理に携わりました。

「ましゅまろ」「せんべい」「かつおぶし」は、
柔らかい から 硬い の順の並びになっているそうです!
つまり、硬くなるにつれ難易度が上がります。

※チーム名は PG BATTLE 運営側で決められたものとなっています。


最後までご覧いただきありがとうございました!




🔽 その他PG BATTLEの記事はこちらです 🔽


この記事が参加している募集

イベントレポ

この記事が気に入ったらサポートをしてみませんか?