一人前のPGになる為に

まずは半人前から...

TopCoderに参加しよう(プラクティス編)

 TopCoderというのはTopCoder社が開催してる競技プログラミングコンテストです

プログラミングコンテストと聞くと、難しそうなイメージがあるかと思います

私も、以前「CODE VS」というのにチャレンジしてみようと思いましたが、ちゃんとしたコードを実際に走らせるまでかなり苦労し、問題も今の実力では解くことが出来ませんでした

TopCoderは初心者でも出来る

TopCoderは問題、解答、提出が一体となったクライアント(Java Applet)で提供されているので簡単に解答、提出ができます

問題も、文字列の並び替えといった非常に簡単なレベルからあるので初心者でも解くことができます

競技では、制限時間以内に3つのレベルの問題を解いて、その速さを競うものなので1つずつの問題が関数を1つ作るというシンプルなものです 

参加準備

まずは、TopCoderのトップページの右上にあるRegisterからアカウントを作成します

次に、TopCoderのコミュニティサイトの左側にあるカテゴリから「Competitions」→「Algorithm」→「Single Round Matches(SRM)」→「Launch Arena」の順に選択するとアプレットが立ち上がるらしい?です

私は、Macを使用しているのですが、どのブラウザでもうまく起動出来なかったので下記のサイトで直接アプレットを手に入れました

Competiton Arena - TopCoder

実際に問題を解いてみる

f:id:pg_ok:20120304225144p:plain

アプレットが立ち上がると、このような画面が出てくるので先ほど登録したユーザネームとパスワードを入力しGOをクリック (コネクションはDirectで問題ないと思います

f:id:pg_ok:20120304230151p:plain

ログインするとチャットルームに繋がります

ここで上のメニューバーにある「Practice Rooms」→「SRMs」→「適当な数字」 →「SRM ◯◯ DIV 2」を選択し、問題がある部屋に進みます

SRMというのは、先程説明した短い時間の間に問題を解くという競技のことで、そのあとの三桁の数字は第◯◯大会ということを表していて、その大会で出された問題を解くことが出来ます

そしてDIV 2というのは、ディビジョン2すなわち2部ということで、競技の結果で上位の人はDIV 1に配属されより難しい問題をとくという事になっているそうです

初心者含め大多数の人はDIV 2となるようなのでここではDIV 2を選択します

プラクティスルームに入ると、画面中央に「Select one」と書かれたプルダウンメニューがありますが、それをクリックすると3つの数字が表示されます 

これは問題の点数を表しいて、高いほど難しい問題です

まず最初は一番点が低いものを選びましょう

f:id:pg_ok:20120304232619p:plain

問題を選ぶと、このような感じの新しいウィンドウが開きます

上側のテキストフィールドには問題の詳細が書かれていて、下側にコードを入力する形になっています

問題はもちろん英語なのですが、心配するほどのものではありません

「Probrem Statement」に問題の概要が書いてありますが、あまりしっかりと読む必要はありませんし、どうしても分からなければ翻訳サイトにぶち込めば雰囲気は理解できるでしょう

その下の「Definition」というのが重要で、ここで指定したクラス名やメソッド名、引数と返り値の型を守らなければいけません

次に、「Constraints」で引数の値の範囲などが書かれ

「Examples」では、入力に対してどのような与えを返せば正解なのかという例が書かれています

その為、最初の問題文が分からなくても、それほど難しい問題でなければ「Examples」を見ることで理解することが出来るはずです

コードの入力が完了したら、右下のコンパイルを押して、それが成功したらテストを行いましょう

右下のテストを押すと、ウィンドウが出てくるのでそこからExample ◯を選ぶと、先ほどの「Examples」に書かれていた例を実行することができます

全て成功したら、サブミットしましょう

サブミットを行うと点数が表示されます

暇つぶし程度に

今回の例は、あくまでも練習問題なのでコンテストとは言えませんが初心者でも簡単に問題にチャレンジできるのがいいと思います

もしこれで興味を持ったなら週一ぐらいで開催されている大会に参加してみて、自分のプログラミングスキルを測ってみてはどうでしょうか

私も、参加してどれぐらい出来るのか試してみるつもりです

スケジュール→TopCoder部