(2015年までの)odaillyjp blog

イベント参加記録とプログラミング系の雑記

AtCoderを始めよう

AtCoder は、プログラミングコンテストの問題を好きなプログラミング言語で解いて、コードを提出できるサービスです。提出したコードは自動でテストされて、問題に正解しているかどうかすぐに解ります。C, Java, Python, Ruby, Haskell などの様々な言語に対応されており、参加者が提出したコードを見ることもできます。

AtCoder
http://atcoder.jp/

大江戸Ruby会議03で「AtCoder の問題を解くのが楽しい!」というお話があり、それから AtCoder のことが気になっていたのですが、先日の shibuya.rb で AtCoder の問題を解いていくセッションがありましたので参加してみました。セッションでは@fukayatsuさんとペアを組んで Regular Contest #012 の問題を解いていきました。ペアであれこれ悩んで楽しかったので、多くの人に勧めるために AtCoder の始め方をブログにまとめておきます。

アカウントを登録しよう

アカウント登録をしなくても問題を見ることはできるのですが、解答を提出できないので、先にアカウントを登録しておきましょう。コンテストのトップページにアカウント登録ページへのリンクがあります。
アカウント登録フォームに「所属」を入力する項目がありますが、これは何を記入すればいいのでしょうか。


とのことなので、私はコミュニティ名を記入しておきました。

問題を解こう

AtCoder のトップに過去に開催されたコンテストが載っていますので、適当なコンテストを選択します。コンテストのトップページにジャンプしますので、問題ページから好きな問題を解いていきましょう。
f:id:Shindo_Masaya:20130321210316j:plain:w400
右下にタイマーがあるので、時間を気にする方は利用するといいのではないでしょうか。
問題に入力と出力の例がいくつか載っていますので、入力値と出力値をテストコードに持っていくと、最終的な振る舞いをテストするときに楽になりそうです。

コードを書くときの注意

Rubyの場合は、入力を ARGV で受け取るとAtCoder側のテストで落ちてしまうことがあるようなので、STDIN.gets.chomp で受け取るのが良さそうです。

【20130322 追記】
@cielavenirさんからご指摘いただきました。ARGV はスクリプトに指定した引数を受け取る配列です。AtCoder では標準入力を使うので、 ARGV は nil になってしまい、テストに落ちるようです。標準入力から値を受け取ることができる gets.chomp や ARGF.gets.chomp や STDIN.gets.chomp のいずれかを使うのが良さそうです。

コードを提出しよう

できたコードを提出してみましょう。提出したコードはAtCoderによってテストされます。全てのテストにクリアすれば、状態に緑色の「AC」アイコンが表示されます。
f:id:Shindo_Masaya:20130321215034j:plain:w200
一つでもテストに落ちてしまった場合は、状態に黄色の「WA」アイコンが表示されます。落ちてしまったテストの内容を見ることはできませんので、何が問題だったのかは自分で探らないといけません。
f:id:Shindo_Masaya:20130321215123j:plain:w200
問題に部分点が設定されている場合は、クリアしているテストによって部分点がもらえます。

あとがき

コードを提出するまでの流れを簡単に紹介してみましたが、いかがでしょうか。プログラミング初心者が勉強がてらにできる問題もありますし、アルゴリズムについてそれなりに勉強していないと解けない難しめの問題もあります。一人でもくもく解いても良いですし、ペアプロの問題に使うのも良さそうです。ぜひ皆さんもやってみてください。