NoiminのNoise

競技プログラミング (多め) とWeb (たまに) ,自然言語処理 (ブログではまだ)。数式の書き方を一気に KaTeX に変えようとして記事を全削除してインポートし直すなどしたので,過去にブックマークされた記事は URL が変わってしまっている可能性があります…….

競技プログラミングを始めて 4 年経った

競プロを始めて今日でちょうど 4 年です。

4年というと中途半端ではありますが,大学編入学という環境が変わる直前に始めた趣味なので,同様に就職で環境が変わる直前である今,なんとなく感慨深いものがあります。そういうわけで,ブログに思い出を残しておこうと思いました。

念のため最初に書いておくと,他の方の色変記事のような,青コーダーになりたい方が参考にできるような内容はないです……。

4年間の Unique AC 数

コンテストサイト・コンテスト AC 数
AtCoder 1024AC
Codeforces 288AC
TopCoder SRM 60AC (コンテスト中 AC は 22)
yukicoder 64AC
Aizu Online Judge 106AC
Google Code Jam 6AC
PG BATTLE 4AC

合計 1552AC

4年間のレート変化

f:id:noimin:20200315231449p:plain
AtCoder
f:id:noimin:20200315231523p:plain
Codeforces
f:id:noimin:20200315231504p:plain
TopCoder SRM

思い出話

競プロを始める前 (高専時代)

高専時代,今は亡き CodeIQ でコードゴルフをして遊んでいた。アルゴリズム系の問題は全然解けなくて,コードゴルフも上位に入れるわけではなかったけど,それでも Prolog とか awk とか提出者数が少なそうな言語で shortest をとったりしてキャッキャしていた記憶がある。

この頃から競技プログラミングのことは知っていた。競技プログラミングをしている愛好会が高専にあったからなのだが,完全に他人事だと思っていた。高専時代の私にとっては,競技プログラミングは (ポジティブな意味で) "やべー奴がやるもん" だった。ただ,アルゴリズムやプログラミングへの理解が浅すぎることに対する焦りはうっすらとあった。

無色〜水色突入時代 (高専卒業〜B3)

高専卒業後,無事希望していた大学 (隠す意味がまるでないけど……) に3年次編入学をすることになった。ごくたまにゲームや作曲をするぐらいであまり趣味と言えるようなものがなかったので,何か新しい趣味が欲しいと思っていたところ,コードゴルフ関連で FF になっていた人たちが何やら AtCoder というサイトで競技プログラミングをしているらしい,ということを知った。まだ競技プログラミングに対して謎の恐怖感はあったが,思い切って AtCoder に登録してみた。

初めての AC はこれABC 033 A - 暗証番号Python 解のようだ。DIFFERENCEDIFFERENT を間違えて WA している。しかもなぜか Python2。

ただ,競プロは思ったより怖くなさそうだということがわかった。初心者向けのコンテストであれば私にもわかる問題が用意されていたし,春休みはそれなりに楽しんで競プロをやった。ちなみにこの頃は ABC の B 問題も怪しいレベルで,主に ABC の A, B を埋めていた。言語は最初は Python だったが,割とすぐに C++ に乗り換えた記憶がある。

ちなみに,このころの AtCoder (2016年春ごろ) はまだレーティングというものが実装されていなかった。私の初期のレートがぐんぐん伸びているように見えるのは多分そのせい。

大学が始まると,思っていたよりも忙しく,競プロは少しおろそかになった。気が向いたときだけコンテストに出て,気が向いたときだけ復習した。「気が向いたとき」というのは週に1-2回くらいだった気がする。こんな感じでギリギリ水色になるところまでは行ったが,明らかにレーティングの傾斜がなだらかになってきていた。

本格的に競プロを趣味にし出したのは,DDCC 2016 の予選を突破したあたりからだったように思う。枠に対して競プロerが少なかったことや18卒枠だったこともあり,なんと100点問題と200点問題を解いただけで予選を突破してしまった。

このままでは本戦が座るだけになるのは明らかだったので,蟻本を読み始めた。初級編を読んだが,正直よく理解できなかった。写経したダイクストラ法を使って問題を解いてみたりしているうちにちょっとわかった気にはなった。気になっただけ。

このときに勉強していたアルゴリズムで名前のついているものは,二分累乗法,ユークリッドの互除法,最短路アルゴリズム最小全域木アルゴリズムとかその辺りだったと思う。

精進の甲斐あってか (?) ,本選は0完太陽にはならずに済んだ。このときに初めて会った競プロerの中には,今でも FF だったりその後も関わりがあったりする人も結構いる。コンテストの帰りなどに一緒に遊びに行った人もいる。競プロer と精進について話したりする中で,かなりモチベーションが上がった。とうとう競プロをメイン趣味にし始めた私は,CodeforcesTopCoder にも参加し始めた。

水色停滞時代 (B3終盤〜B4)

モチベーションが上がったすぐ後ぐらいに,レーティングが停滞し始めた。のちにレーティング大暴落を経験したので今でこそ「それぐらいレーティングが低下することもたまにはあるよな〜」という感じだが,当時は慣れていなかったので結構しんどかった。

さらに,研究室に配属され,スランプを抜け出せないまま競プロに割ける時間が減ってしまったのも大打撃だった。しかし,研究室で足を引っ張ってばかりいる自分が唯一研究室の他の人にも勝てるものが競プロだったため,競プロへの逃避はやめられなかった。しばらくそうしていると,徐々に「人より研究をしっかりやることを諦め,研究室のタスクはほどほどにして競プロをやる」を覚えてしまい,それに伴ってレーティングも回復し始めた。

CODE THANKS FESTIVAL 2017 に出場することができたのもかなり救いだった。このときの行きの電車の中で,同期の sidebook37 と ICPC のチーム組みたいねみたいな話をした。詳しくは ICPC の参加記 に書いたので割愛。

コンテストとは関係ないが,CODE FESTIVAL 2017 の T シャツのデザインは今までもらったプログラミング系イベントの T シャツの中でいちばんのお気に入り。でかでかと書いてあるグラフが可愛いし部屋着のズボンとよく合うので……。

f:id:noimin:20200316001552j:plain

青色突入時代 (M1〜今)

このあたりから,Twitter やこのブログでもよく書いているような時代になる。

M1 の前期は「ICPC があるから……」と,研究室関連のタスクを犠牲にして競プロをやっていた。その甲斐あって,やっとこさ青コーダーになることができた。

しかし ICPC の参加記 に書いた通り,学内2位国内予選敗退。模擬国内予選の結果が良かっただけに人生の3本指に入りそうなくらい悔しかった。ちなみに学内1位だったのはこの年に結成された (間違ってたらごめんなさい) Aobayama_dropout。

ICPC という大学院生活の支えを失い,毎日に張り合いがなくなってしまったものの,レーティング的にはしばらく青をキープ。AtCoder Jobs を通して夏の短期インターンにも参加した。短期インターンで参加した企業は雰囲気が自分にマッチしている上に業務にも割と関心が持てる感じで,結構良かった。この企業はのちに私の内定先となり,writer デビューのきっかけともなる。

しかし年が明けた頃に落水。その後しばらく不安定なレーティングが続く。色々あって M2 になる頃には研究室にはほぼ行かなくなり (教員と相談の上だし,研究は多少の休止期間を経て最低限続けてました,一応……) ,競プロに使える時間が増えても下がる下がる。最低で Highest-272 まで下がった。落ち込みはしたがレーティングの下がり幅の割には楽観的な気持ちで,そのうち回復するだろうと思いながらマイペースに問題を解いていた。実際にレーティングが回復してきたのは秋頃の話なので,半年間ぐらいスランプだったことになる。

気づけば AtCoder の Rated 参加回数が 100 回を突破。Rated 参加回数が多いのは Rated が多いレーティング帯から抜け出せていないということなので誇らしいことではないが,なんだか達成感があった。

そして先月はついに初めて writer をやった。これもブログに記事を書いたばかりなので詳しくは割愛するが,自分の作った問題を面白いと言ってもらえるのは想像以上の喜びだった。夏の終わり〜秋頃にまた writer をやるつもりなので,今から問題のストックを貯めようと試みている。

オチというほどではないが,来月からフォルシア株式会社で web エンジニアとして働くことになっている。御社は競プロをやっていなかったら出会えなかったであろう企業なので,競プロがだいぶ人生に影響を及ぼしてきたなという感じだ。これから競プロとどういう付き合いになるのかも,自分がどこまで強くなれるのかもまったくわからないが,競プロは長く付き合っていきたい趣味だと思う。御社には競プロerがそれなりにいるし,社会人になって競プロからフェードアウト……みたいな感じにはならずに済むはず。

追記: この記事が本ブログ 100 記事めだったみたい。感慨深い。