加具留矢流余

かぐるやるよ

AtCoder色変記事(緑)。あるいは趣味としての競プロの勧め。

何番煎じか分かりませんがこの度晴れてAtCoderで緑帯に突入することが出来ました。 もう巷には緑になるために必要な修行方法が溢れているので、「緑になるために何をしたか」ではなくて、「趣味としての競プロ楽しいよ!」という内容にフォーカスを当てて記事を書こうかなと思います。

簡単に自己紹介

院卒社会人2年目です。理系だったものの学科も勤め先もITやプログラミングとは程遠くプログラミングは完全趣味でやっています。大学時代はコツコツ独学でAIなどの勉強をしてました。その延長でkaggleなどにも参加していましたが、あまりまとまった時間が取れずメダルを取ること無く引退してしまいました。

競プロに出会ったきっかけは覚えていませんが、初めて参加したきっかけは腕試し目的でした。独学ですがそれなりにプログラムを数書いてきた自負があったので緑くらい数回参加すればなれるでしょ、と思っていましたが初参加(確か企業コン)で現実を思い知らされました。以降悔しさから積極的に参加するようになって今では虜です。

競プロって何?

自分が説明するよりWkipediaを見ていただいたほうが正確で早いです。

ja.wikipedia.org

あえて自分の言葉で説明すると、「数問の問題が出されるので、コンテスト時間内に問題を解くプログラムを正確かつ素早く解く競技」になるんでしょうか。AtCoder社が開催するABCというコンテストを例にすると、100分という制限時間の6問(A~F)の問題が出題されるので、自らの知識・技術・経験を総動員してできる限り多くの問題を素早く解くことを競います。1問目(A問題)は非常に簡単ですが、後半になると深いアルゴリズムの知識と考察力が必要とされるので全問解けるのは多くの場合参加者のごく一部です。

コンテストサイトによって細部は異なるかもしれませんが、大手のコンテストサイトには実力を示すレーティングの仕組みがあります。レーティング帯に対応する色が定義されていて、この色によってざっくりとその人の実力が分かるようになっています。AtCoderだとレーティング0~400が灰、400~800が茶、800~1200が緑と400ごとに区切りが設定されていて、初心者は多くの場合灰〜茶帯を彷徨うことになります。

chokudai.hatenablog.com

競プロの魅力

で、それって面白いの?という話ですが、めちゃくちゃ楽しいです。楽しすぎて最近はABCには殆ど毎回欠かさず参加しています。これまで何で競プロが楽しいと思うのか?について言語したことがなかったので何とか言葉にしてみました。

達成感

個人的にはこれが一番のモチベーションです。おそらくですが最初数回のコンテスト参加で適正なレーティングに配置されます。アルゴリズムを少し齧ったことがある、程度だと多くの場合良くて茶色になるのではないかと思います。一度自分の適正レーティングに到達したあとに次の色を上げるためにはかなりの努力が必要です。

コンテストに参加しても思うように解けずレートが下がって(よく冷えるとか言われてます)ぐぬぬ...となります。Twitterで他の人が色変してると嫉妬で血の涙が出そうになります。それでも負けじとコンテストに参加し続けて次の色に到達したときはめちゃくちゃ嬉しいです。アドレナリンだかエンドルフィンだか分からないですけど脳内で謎の汁がいっぱい出ます。緑になったときは無意味にシャドーボクシングしてました。

f:id:theflyingcat28:20201109221837p:plain
入緑嬉しい

努力が身になっているのが実感できる

競プロはコンテスト自体は2時間程度です。それ以外の時間は過去問を説いて勉強したり、解けなかった問題を振り返ったりという修行の時間になります。コンテスト自体は頻繁に開催されているので、努力したら努力した分見える形で結果として帰ってきます。最初自分は数学系の問題だったり幅優先探索系が苦手過ぎてコンテストの度に絶望する日々を送っていたのですが、精選100問やったり類題解きまくったりしてると「はいはいこのパターンね」みたいな感じになって俺TUEEEEE(弱い)が出来ます。

f:id:theflyingcat28:20201109222354p:plain
有志によって運営されるAtCoder Problemsで修行の成果が見れます

短期間で努力の結果がフィードバックされるのはモチベーションの維持としては良い仕組みだなーと思って修行してます。kaggleの数ヶ月に渡るマラソン的なコンテストと違って競プロは短時間なので忙しくて修行できなくても、落ち着いた段階で気楽に再開できるのも良い点だなと思ってます(この辺は個々人の好みによるところが大きいかもしれないです)。

感情を揺さぶられる

上2つの項目で書いたことの言い換えになってしまっているところはありますが、コンテストに参加すると感情が揺さぶられます。今までD問題までしか解けなかったときにE問題まで解けたときは嬉しくて情緒不安定になりました。逆にC問題が解けずレートが下がったときに回答を見たらめちゃくちゃ簡単な問題だったときは辛くて情緒不安定になりました。こんな感じでコンテストに参加していると喜怒哀楽大体の感情が楽しめます。コンテストに参加することによって平坦な生活に刺激が発生します。

コンテスト終わったあとにTwitter眺めているのも楽しいです。コンテスト後は喜んでる人、落ちこんでる人、解説してくれる人、いろんな人が居てお祭りみたいな感じです。普段Twitter見ないだけかも知れませんが。

社会人にこそおすすめの趣味

なんか参加している人学生が多そうだし社会人になってから始めるのもな...と感じているかも知れません。というか自分がそうでした。大して時間も取れないし学生に遅れを取りそうと思っていました。でも実際に初めて見ると社会人の方もたくさんいらっしゃいますし、時間的な面もあまりハンデになっていないなと思っています。

AtCoderのコンテストであれば大体土日の夜開催

初心者向けのABCを始めとしてAtCoderはだいたい土日の夜に開催されます。飲み会とかをセットしない限り独身であれば高確率で参加できます。突如コンテストが生えることもありますが、基本的に数日前には開催がFIXしてるのでそれなりに予定も組みやすいです。

隙間時間でも修行できる

修行するしないは個人の自由なので、仕事終わりに一日一問みたいな感じに練習してみてもいいですし、土日にまとめて修行みたいな感じでも好きなようにできます。自分はやる気がある日にぐぉーって自分の適正より難しい問題を数問説く感じでやっています。

というような感じで割と柔軟にできます。そういう意味ではまとまった時間が取りにくい社会人にこそおすすめの趣味なのでは?と思っています。

実利的な話をするとAtCoder Jobsなどで転職の助けになったりすることもあるみたいです。あとアルゴリズムの知識が仕事の役に立つかもしれないです。競プロは仕事の役に立たない!という意見も見かけますが、職場に寄るところが大きい気がします。「役にたたない...」と思ってやるよりは「役に立つ!」と思ってやったほうが確実にモチベーションは繋がるので役に立つと思っておくのがいいかと思います。

始めてみたい!

始めましょう。まずは日本語で参加できるAtCoderのコンテストがおすすめです。初回参加して絶望したら先人の色変記事を読みましょう。やるべきことが見えてきます。おすすめの記事を貼っておきます。

ntk-ta01.hatenablog.com qiita.com qiita.com

終わりに

もう色変記事じゃない気がしてきました。それにAtCoderの回し者みたいになってしまいました。この記事を見てAtCoder見て始めてくれる人がいたら嬉しいです。こんな楽しみ方もあるよ!という意見があれば是非記事にしてください!