今日からはじめるTopCoder最近自分のまわりでtopcoderに興味をもつ人が多いので、入門記事を書いてみます。TopCoderとはTopCoderとはオンラインで開催される、プログラミングコンテストです。誰でも無料で参加でき、世界中の参加者たちと腕を競い合えます。Jamのような年に一回開催される大会とは異なり、月に数回開催されるので、コンスタントに参加できます。個人で参加でき、予選などもなくいつでも参加できるので、プログラミングやアルゴリズムの練習・学習に最適だと思います。世界中の人が参加するので、登録や問題文は全て英語で書かれています。プログラミングをしながら英語も勉強できるなんて最高ですね!SRMの流れTopCoderのコンテストはコーディングのコンテストだけではなく、設計やデバッグ、高校生専用大会など、色々な種類があり、日々活発に競技が行われています。Hardという得点の違う3問が出題されます。制限時間は75分間で、その間に解答します。それぞれ、問題文とインプット/アウトプットの要件と例が示されるので、それに沿ったメソッドを書いて提出します。VBの中から一つを選択します。75分という制限時間からもわかる通り、コードの行数はそれほど長くはならず、100行いくとけっこう長いなあと感じるくらいです。それよりもアルゴリズムを考えさせたり、数学的なひらめきを要求する問題が多いです。コードは2秒以内に実行できなくては行けないので、実行時間にも気をつける必要があります。参加者にはratingが付与され、ランク付けされます。コンテスト各回の結果に応じて変動します。ratingの計算方法はこちら。参加者はratingのスコアごとに色分けされます。coderは全世界で220人ほどしかいない、めちゃくちゃすごい人達です。会員登録数が約22万人なので、この数値で計算すると上位0.1%ということになります。その中でも特に優秀なプレイヤーには、白丸がついたアイコンが表示されます。coderになることは、単にコミュニティの羨望を集めるだけではなく、海外では就職にも有利になるそうです。CompetitorsまたSRMはdiv1とdiv2の二つのグループに分かれています。div1にはブルー以上のratingの人しか参加できず、また問題もdiv1の方が難しくなっています。3回開催されています。例として、こんな問題が出ます。"1:1:1".要約すると、秒換算の時間が与えられるので、それをHH:MM:SSというフォーマットで返せ、という問題です。easyという簡単な問題ですが、これならとっつきやすそうですよね。登録では、早速登録してみましょう。Now"から行います。項目が多くて面倒ですががんばります。練習してみる登録が終わったら、早速練習してみましょう。いう練習専門の部屋があり、ここでは過去のコンテストの問題を全部見ることができます。roomでの問題はratingに反映されず、何度でもサブミットやシステムテストをすることができるので、思う存分練習できます。div2のeasyからやってみるのがいいでしょう。方法についてはこちらのサイトに詳しいです。いう緑色のボタンを押すと、他の人のコードを見ることができます。非常に勉強になるので、解いた後は他の人のコードも見るといいと思います。Pluginの設定コンテストを戦うにあたって、プラグインの設定は必須です。プラグインを導入することに依って、ローカルでコーディングとテストができるようになります。公式のアプレットではなく、使い慣れたエディタとシェルを使用できるので、スピードが飛躍的にあがります。プラグインの設定はgulfweedさんの記事が素晴らしいです。Gulfweed参考までに、僕のC++のテンプレートはこれです。いうファイルが作られます。このファイルの中にクラスの宣言やテストコードなど(設定次第では問題文も)が全て含まれています。このファイルにコードを書き、できたら普通にコンパイル/実行するとテストが走ります。コンパイルは、topcoderサーバで-O2オプションがつけられるそうなので、実行時間がシビアな問題もあるので、ローカルでも同様のオプションをつけることをお勧めします。僕はいつもこんな風にしています。./a.outテストが大丈夫そうなら、サブミットします。ローカルのファイルの内容はアリーナにも反映されているので、あとはアリーナ上でコンパイルし、サブミットするだけです。練習の成果を本番で発揮しましょう。SRMやその他イベントの予定はこちらで見れます。calendarにインポートして使わせてもらっています。calendarSRMは開始3時間前から参加登録できます。div2で分かれ、その後だいたい20人ずつくらいの部屋に分けられ、対戦します。testの4つのフェーズに分かれます。ここではひたすら問題を解きます。phaseが始まります。phaseでは他の人のコードを見ながらバグを見つけ、そのバグをつくインプットを投げるchallengeを行います。challengeが成功すると75pt加算され、失敗すると50pt減点されます。testが行われます。testでは問題文中のテストケースよりも多くのケースでテストされ、これに通ると点数が確定します。システムテストに落ちると、その問題の得点は0になります。roomで過去問を解きましょう。わからない問題があった場合は、他の人のコードを読んでみます。その他にも、公式サイト上に過去問題の解説記事もアップされていて、非常に役に立ちます。Wikiこの他にもtopcoderにはチュートリアル記事があります。Tutorialsコンテストの挑み方の基本から、各アルゴリズムの解説まで多岐にわたっています。roomから練習問題が提示されていることが多いので、実際に問題を解きながら学べて非常に良いです。問題文の読み解き方の解説です。定番のアルゴリズムの概論を解説してくれています。アルゴリズムの計算量などの話題です。時間の見積もりは非常に重要な要素です。C++使いでstlにあまり慣れていない人は、この記事で必要な機能を速習すると良いと思います。すべて目を通した訳ではないので、他にも良い記事があるかもしれません。日本語の記事だと、kinaba(cafelier)さんの記事が素晴らしいです。d.y.d.特に(1)の実行時間の見積もりは、アルゴリズムコンテストに挑むにあたって必須です。僕もまだきちんとできてないです。エンタープライズその他ICPC向けの解説記事などがあります。ACM/ICPC国内予選突破の手引きその他の情報源TopCoder部はてなグループのTopCoder部です。TopCoderに挑戦しているはてなーの皆さんの日記が読めます。慣れたらぜひ書いて見てください。ちなみに僕もここで書いてます。はてなブックマークはてブのtopcoderタグにも色々情報が集まります。参加したことはないんですが、IRCチャンネルもあるみたいです。IBMアメリカの学会ACM主催の学生向けプログラミングコンテストです。世界で最も有名な大会。年に一度開催されます。2009Google主催のプログラミングコンテスト。こちらは学生でなくても出場できます。2010Microsoft主催のコンテスト。アルゴリズムだけでなく様々な種目があります。天下一プログラマーコンテストKLab株式会社主催の学生向けプログラミングコンテスト。来年も開催されるかもしれません。学生向けコンテストです。2009)東大生向けのクローズドな大会のようです。Euler数学的な問題が集められたコンテスト。こちらはタイムアタックの競技ではなく、正解数を競うもののようです。Homeこちらもタイムアタックではなく、コードの短さを競う大会です。参加者はgolferと呼ばれます。「「どう書く?org」へようこそ!このサイトは出されたお題をいかに解くか競い合う、プログラマのためのコロシアムです。」パソコン甲子園2009高校生向けののコンテストです。Site高専生むけのコンテスト。競技だけでなく、作品を提出するタイプの種目もあるようです。U-20プログラミング・コンテスト20歳以下対象のコンテスト。作品を提出するタイプの大会のようです。Site高校生/高専生向けのコンテスト。スパコンで問題を解くそうです。Pageどのプログラミング"言語"が最強かを決める大会らしいです。ほかにもあるかもしれませんが、こんなところで。