こんにちは。技術開発第二部門 エンジニアの山路友也です。
今回はありがたいことに僕の趣味である競技プログラミングについて語る機会をいただきました。たっぷりと語らせていただこうと思います。
競技プログラミングとは?
とてもざっくりいうと、「コンピュータサイエンスや数学の知識を駆使してアルゴリズムパズルをより速く正確に解く」ことを競う競技です。
競技プログラミングでは長いので、略して競プロと呼ばれます。
また、競技プログラマーでは長いので、競プロer(きょうぷろあー)と呼ばれたりします。
日本での主戦場はAtCoder株式会社が主催するコンテストで、
ほぼ毎週末の21時から2時間程度のコンテストがオンライン上で開催されています。
また競プロの面白いところとして、自身のレーティングによって「色」が変化する点があげられます。
AtCoderのレーティングシステムでは、灰色から始まって、
茶→緑→水→青→黄→橙→赤と続き、赤色は通称「レッドコーダー」と呼ばれ、全競プロerの憧れや夢でありながら、
その圧倒的な実力から畏敬の念を向けられています。(ちなみに僕は水コーダーです)
コンテストの成績が良ければレートは上がるのですが、反対に悪ければ落ちます。
競プロerは毎週末に頭をフル回転させてこれを奪い合っているのです。
どんな勉強をしているの?
二分探索、ダイクストラ法、動的計画法、
セグメント木などのアルゴリズム・データ構造の勉強や、
AtCoderやyukicoder(日本の方が運営されている競プロを練習できるサービス)、
JOI(日本情報オリンピック委員会による代表選考会の過去問)、
AOJ(会津大学が運営しているオンラインジャッジ)などの問題を解いています。
また猛者は海外のコンテストであるCodeforcesやTopCoderの問題も解いているようです。
自分は1日あたり1時間〜2時間程度の時間を競プロの精進に使っています。
何もわからずに2時間静止していることもありますが、概ね楽しくやっています。
競プロのおもしろさと難しさ
ここまで読んでいただいて、「競プロはアルゴリズムの知識がものをいう競技」だと思われた方もいるかもしれませんが、それは正確とは言えません。
競プロのおもしろくも難しい点として、「難しいアルゴリズムを知っているだけでは不十分」という点があげられます。
求められるのはあくまでも「アルゴリズムの設計・構築能力」なのです。
勉強をしないと解けないのは当たり前ですが、勉強をしても解けるとは限らない、
これが競プロのおもしろい点でもあり、難しい点でもあります。
強くなるためには、先の見えない精進をひたむきに積んでいくしかないのかな、と思っています。
Fusicプログラミングコンテスト
僕の趣味を少しでも知ってもらおうと、今年の1月に社内で小規模なコンテストを開催したこともあります。
反応はとてもよく、7月上旬には第二回も開催させてもらいました。
第一回の様子はFusic Tech Blogにてレポートしているので、気になった方は是非読んでいただければと思います。
おわりに
ということで今回は僕の趣味である競プロについて、たっぷりと語らせていただきました。ここまで読んでいただきまして、ありがとうございます。
PC一台あればできる、お金がかからない、1人でできる、天候に左右されない、勉強になる、
そして何よりおもしろい、そんな最高の趣味である競技プログラミングをこの機会に始めてみてはいかがでしょうか?
それでは、コンテストでお会いしましょう。