競プロを楽しむ

始めに

 この記事は14日間連続OUCC活動紹介マラソン13日目の記事です。競プロと聞いて、ただでさえ難しそうなプログラミングを、さらに競うなんて、競プロerはなんて野蛮な種族だなどと思う人も多いと思います(ほんまか?)。そんな誤解を少しでもこの記事で解くことができたらと思います。
 僕自身は最近競プロをやってないのですが、その理由も読んでいくと少しわかってもらえるかもしれません(そしてそろそろ再開しようと思っている理由もね)。

競プロ is 何

 競プロってどんなことをするのか、はいろんな人がいろんなとこで紹介してるので、ググったらいっぱい出てきます。簡単に言うと、「パズル的な問題が出題されるので、それを解くプログラムを書いて、そのプログラムが正確に動くか、そしてそのプログラムを書く速さを競う」競技です。日本でメジャーなAtCoderではほぼ毎週コンテストが開かれています。これだけ読んで楽しそうと思っちゃった人はもうこれ以降読まなくてもいい気がします。AtCoderのリンクへどうぞ!

競プロって楽しいの

 楽しいです。僕は。人によって何が楽しいとかはもちろん違いますが、自分が思う競プロの楽しさを書こうと思います。

パズルを解く・ブロックを組み立てる楽しさ

 実は競プロはプログラムを書くのがメインではなく、どうすれば問題が解けるかを考えるのが一番大きなポイントです。こうすれば解けそう、みたいな物を積み上げていくプロセスが、僕が一番楽しいと感じるところです。最終的に解法をプログラムに書くのはぶっちゃけおまけです。

動くプログラムをとりあえず何でもいいから書けばいい

 普通プログラムは、ほかの人が後から読んでもわかるようにとか、バグの温床になる書き方はしないとか、ルールと言わないまでも、マナーのような物が存在します。ですが競プロは、動くプログラムをどれだけ早くかけるかを競うので、そんなものお構いなしです。ソースコードがぐっちゃぐちゃでもいいのでキーボードをとにかく早く叩く、これがまた楽しい。

すぐに結果がわかる

 AtCoderでは、問題を解くプログラムを提出すると、ほとんどの場合1分以内にその正誤を判定してもらえます。問題を解き終わった後の達成感も大事です。これがすぐに得られるAtCoderは神。

f:id:pelno:20200414001151p:plain

提出一覧

自分の実力が数字でわかる

 AtCoderCodeForcesでは、競プロのコンテストが開催されます。このコンテストの結果によって、自分の実力を表すレートという数値が変動します。精進(競プロのお勉強をすることを精進と言ったり言わなかったりします)すればするだけレートが上がるので、モチベーションにもつながります。

f:id:pelno:20200414000936p:plain

AtCoder成績表

 これは僕のAtCoderの成績です。8月ぐらいから半年ほどコンテストに出てなかったんですが、そろそろ復帰したいと思っています。夏休みに入るとゲームやらゲームやらゲームやらで忙しくって、精進できなかったんですよね。競プロ、楽しいのは間違いないんですが、Minecraftには勝てなかった...。ICPCもあるし、精進していきたいと思っています。興味ある人は声かけてもらえればICPC案内します!僕のTwitterまでどうぞ~。