競技プログラミングしませんか?

本記事はマイネット Advent Calendar 6日目の記事です。

今回は、社内でFFXIVを布教している@zakiryがお送りします。

はじめに

自分のコーディング能力を上げるために競プロで訓練を始めたけど、 やっている人が身近にいなくて誰にも相談できない状況を改善したい記事です。

競技プログラミングとは

問題が出題されるので、その問題を解くコードを制限時間内に作成するものです。 コードを提出すると、主催者側が用意した入力データで実行され、出力データが正しいかチェックされます。
基本的に、標準入力を取得して、ゴニョゴニョ問題を解いて、標準出力する、 というもので、実行環境を準備すればできるので参加しやすいと思います。

メリット

  • コーディング速度が上がる
    制限時間が設けられているので、できるだけ早くコードを書く訓練になります。
  • コードの質が上がる
    先程は省略しましたが、問題にはプログラムの実行時間が制限されています。 実行時間が制限されていることを意識して、できるだけ少ない計算量で結果を出力するコードを書く訓練になります。
  • 数学力が上がる
    難しい問題では、数学の知識がないと解けなかったりします。 全部覚えようとすると大変ですが、少しずつであればそんなに大変ではなく、 数学に触れる良い機会になります。

個人的にはこの辺りが競技プログラミングをやって得られるものだと思っています。 デメリットが有るとすれば、多少時間を使うことくらいではないでしょうか。

始め方

競技プログラミングをやっているサイトをいくつか紹介します。

  • Atcoder
    一番おすすめです。理由としては、全て日本語、終了後に解説をしてくれる、様々な言語に対応している、などです。 問題が日本語で出題されるので、コーディングに集中することができます。 また、終わった後には解説の資料なども公開してくれるので、わからない問題があっても資料を見て勉強することができます。 採点システムが日々改善され、使用できる言語の数が徐々に増えています。

  • TopCoder
    一番大きなコンテストです。 海外のサイトすべてに言えるのですが、開催時間が日本時間だと深夜、問題が英文、といったあたりがネックになりやすいです。 レッドコーダーという言葉を聞いたことがあるかもしれませんが、 それはこのコンテストのトップクラスの人達のことで、とてもすごい人達です。

おわりに

ソーシャルゲームの運営という業務なので、 ソースコード上の処理よりもDBへの読み書きがネックになるなど、業務では全く別の知識も必要になります。 それでも、コードを書くということは、基礎になる部分だからしっかり鍛えたいと思います。