LE社のエンジニアたちの風がふくまま気の向くまま本音コラム

言語マニアが勧めるプログラミングコンテストまとめ

»

 リーディング・エッジ社の言語マニアの吉永彰成です。今回は、プログラミングコンテストを紹介したいと思います。

プログラミングコンテストについて

 プログラミングコンテストは、世界中のプログラマが集まり、コーディング能力を競い合う競技です。 ある課題について、アルゴリズムとデータ構造の知識を駆使し、C++などのプログラミング言語でソースコードを素早く書き、正確にデバッグする能力が必要になります。 オンサイトで行われるコンテストとオンライン上で行われるコンテストがあります。この記事では、オンライン上で参加できて、私が参加したことのあるコンテストを紹介します。

TopCoder

 TopCoderは、オンライン上で参加できるプログラミングコンテストの中で最もメジャーなコンテストの1つです。TopCoderでは、様々なコンテストが開催されていますが、中でもSingle Round Mach (以下SRM)は月に3回程度開催されており、参加し易いコンテストです。

 参考のため、SRMのルールを簡単に説明します。SRMでは、75分のコーディングフェーズの間に、3つの課題についてソースコードを書き提出します。使用できる言語は、C++、Java、C#です。1つの課題毎に好きな言語を使ってコーディングする事ができます。私は毎回C++で書いています。なお、課題文は英語です。出題者への質問や他の参加者との交流も基本的に英語で行います。

 コーディングフェーズ後に5分間の休憩を挟んで、15分間のチャレンジフェーズがあります。チャレンジフェーズでは、他の参加者のソースコードを見て、バグを見つけ出します。他の参加者のプログラムに入力を与える事ができ、バグを誘発する入力を与えると、自分に得点が加算されます。

 チャレンジフェーズ後にシステムテストがあり、作成したソースコードが正確な解を出力するかどうか詳細に試験されます。試験に合格した場合、その課題の難易度と提出するまでの時間によって得点が加算され、最終的なコンテストの結果が出ます。

 コンテストの結果によって、各参加者のレーティングが変動します。レーティングが1200未満の人はDivision 2、1200以上の人はDivision 1に振り分けされます。レーティング2200以上の人はRed Coderと呼ばれ、相当の実力のある人しか到達できない狭き門です。

Codeforces

 Codeforcesもオンライン上で参加できるメジャーなコンテストです。月に3回程度開催されています。使用できる言語が豊富で、C++、Java、C#の他、Python、Ruby、Haskell、Scala等が使用できます。私はC++かPythonで参加する事が多いですが、たまに気分転換でC#も使います。課題文は英語です。

Google Code Jam

 Google Code Jamは、Googleが主催するコンテストで、年1回開催されています。使用できる言語は、すべてのプログラム言語です。勝ち抜き戦で、Qualifier (予選), Round 1A, Round 1B, Round 1C, Round 2, Round 3, Final (決勝戦)があります。予選では、全ての課題について、異なる言語を使ってコーディングする人がいて、一種の名物になっています。私は、C++とD言語で参加しています。課題文は英語です。

Ant_4

東京大学プログラミングコンテスト

 東京大学の学生が年1回に主催するコンテストです。初心者から上級者まで参加できるコンテストになっています。コンテスト後行われる懇親会では、普段TopCoderやCodeforcesで腕を競い合っている参加者と交流する事ができます。課題文は日本語です。

参考文献

 これからプログラミングコンテストに参加したいと考えている方に、まず読んで頂きたいのが、『プログラミングコンテストチャレンジブック』です。プログラミングコンテストの練習問題と定石がまとまっていて、アルゴリズムの基礎について解説も丁寧に書かれている名著です。著者は東京大学大学院にて計算機科学を専攻する大学院生です。私は東京大学プログラミングコンテストの懇親会でこの本の3名の著者(右の画像)と最強最速アルゴリズマー養成講座の高橋直大さんからサインを頂きました。

参考サイト

 TopCoder部では、主要なプログラミングコンテストの日程を確認したり、各参加者の現在のレーティングを一覧で確認したりする事ができます。TopCoder部では、ブログを公開する事ができ、各コンテストで書いたソースコードを解説付きで公開している参加者も多数います。

最後に

 プログラミングは楽しいものです。しかし、開発エンジニアの中には、納期に追われてばかりで、プログラミングの楽しさを忘れている方も多いのではないでしょうか。そういう方は、是非とも趣味としてプログラミングコンテストに参加し、アルゴリズムを考える力を養いながら、プログラミングの楽しさを再発見していただきたいと思います。

Comment(0)