Sphere Online Judge自体の情報を書いていなかったので、ここでまとめます。
「SphereOnlineJudge」キーワードで検索してくる人も多いようなので、登録からやり方まで一通り書こうと思います。
Sphere Online Judgeとは
参加方法
参戦
判定
次の問題へ
Sphere Online Judgeとは、Web上ののオンラインジャッジシステムです。
たくさんのアルゴリズム的な問題が登録されています。これらに対して、プログラムを書いてブラウザから提出することができます。
すると、システム側でそのプログラムの検証作業が行われ、数秒で結果が返ってきます。
プログラムが正しくその問題を解けていれば、無事にクリア(accepted)というわけです。
このようなジャッジシステムは多数あります。このSphere Online Judgeは、他のシステムに比べ対応している言語が膨大なことが特徴です。
C,C++,Java,PHP,RUBYなどの有名どころはともかく、F#とかLUAとかGOとかマイナーどころもカバーしており、さらにADAとかICONとかWSPCとか(少なくとも私は)聞いたことないようなものまで
幅広く取り扱われております。たいていの問題はどの言語でも解答可になっているので、プログラミングの腕試しにも、新言語の勉強にもどっちにも使える素晴らしいシステムです。
このシステムを使うは、登録が必要です。(といっても、よくある、アカウント名とパスワードを決めてメールを受け取る程度の簡単なものです。)
誰でも無料で参加できます。
まず、Sphere Online Judgeにアクセスしてください。
左側が各種メニューになっています。
既にユーザー登録していれば、UserとPasswordにそれぞれアカウント名とパスワードを入れるとログインできます。
新規の場合は「register」から登録をすることができます。
自分のプロフィールを見るには「my account」です。これはログインしないと出てきません。
また、問題に回答するには「submit」。問題を探すには「problems」や「search」を利用します。
「my account」を見ると、「Current world rank」でランキングが確認できたりします。上位目指して頑張りましょう。また、過去に提出した問題なども見ることができるので有効に活用しましょう。
さて、では早速問題を解いてみましょう。
まず、「problems」をクリックします。すると、問題の一覧が出てきますので、一番上のID1の問題「Life, the Universe, and Everything」を選びましょう。
これは、解いた時の記事でも書いたとおり、Sphere Online Judgeの「スライム」的な問題です。
問題を読んでみましょう。英語ですが、完璧に読む必要はありません。「Input:」や「Output:」も参考に、何を求められているのかを考えます。
大体は最初に背景(解答に直接は関係ないようなもの)があり、問題の概要があり、そして仕様が書かれます。その後、入力と出力のサンプルが書かれています。
今回の問題も、最初に宇宙の答えがどうのこうの、とありますが、気にせず問題の仕様と、求められているものを理解しましょう。
簡単ですね。仕様は4つ。「2桁までの数値を入力できる」「数値が42以外ならそのままオウム返しする」「数値が42だったら終了」「終了するまで何回でも入力できる」。
オンラインジャッジのプログラムではエラー処理は特に考えません。仕様に2桁までの数字(integers of one or two digits.)と書いてあったら、それ以外は想定する必要がありません。文字列処理とか空白処理とか3桁とか気にする必要がありません。
また、「Input」や「Output」はあくまで「例」です。ここに書かれているもの以外にも、問題の仕様の範囲で様々な入力が来るでしょう。いきなり42が来るとか、1000回ぐらい適当な数字が来た後で42が来るとか。
あとは、問題の制約を見てみましょう。
問題の下の方に、制約が書かれています。
「Added by」は問題をシステムに追加した人ですね。最初のうちは関係ないでしょう。そのうちファンになったらその人の問題を追っかけるのもおもしろいかもしれません。
「Date」は追加日ですね。
「Time limit」これは重要です。プログラムの実行制限時間です。今回は10s、つまりCPUを10秒も使っていいことになっています。(10秒も、です。コンピューターは1秒で相当な計算ができます。)
今回の問題では心配する必要はありませんが、今後、再帰とかループとか、処理時間がかかるプログラムを書く際には重要になってきます。この制限時間を超えると無条件で時間切れエラーとなるので注意です。
「Source limit」は、ソースコードの文字制限です。今回は50000B、つまり50000字まで使えるので十分ですね。
コメントもカウントされるようなので、文字数オーバーエラーとなったら、コメントを削って試してみてください。
「Languages」は、解答可能な言語です。Allなので、Sphere Online Judgeが対応している全ての言語で解答です。たまに制限があるので、気をつけてください。
「Resource」は、その問題の出展です。こういったプログラムの大会は毎年世界各地で行われているので、そこの過去問が載っていることがしばしばあります。
しかし、今回は銀河ヒッチハイク・ガイドという物語が元ネタです。
さて、制限が分かったところで、早速解答してみましょう。
お手持ちのエディタでコーディングしてください。
コードができて、満足いくテストができたら(最低限問題文のInputをいれたら、きちんとOutputが出るかどうかぐらいはチェックしましょう。)、画面上部の「Submit」をクリックします。
すると、ソースを送る画面となります。なお、しばらくブラウザを放置していると勝手にログアウトされるので、そうなった場合はログインしなおしてください。
まず左下の「Language」から言語を選びます。「C」とか「Java」とか。次に、エディタっぽいところにソースコードを貼り付けます。「参照」ボタンからファイルをアップしてもよさそうです。
最後に「Send」で送信します。
問題を送信すると、結果画面の表に遷移します。上に行くほど新しい「回答」です。自分の名前を探しましょう。さっき送ったばっかりなので上に方に出ているはずです。
しばらくすると、「RESULT」の欄に判定が出ます。どのように表示されましたでしょうか?下記に代表的なものを列挙しました。
おめでとうございます。正解です。プログラムは正しくコンパイル・実行され、仕様を満たしていたということです。
横のTIMEとMEMも一応気にしつつ(より短い時間・少ないメモリで解けると自己満足できます)、次の問題に取り掛かってください!
ちなみに、これ(accepted)以外は全て不正解です。
プログラムは実行できたが、出力が間違っていた場合です。
改行などもちゃんと出していますか?(よくあるミスです)
また、仕様の範囲内で全てのパターンが網羅・想定されていますか?
もう一度コードと仕様をチェックしてみて再度「Send」してみてください。
時間切れです。問題に定められた時間をプログラムはオーバーしてしまいました。
プログラムの無駄を省くか、無限ループが起きていないかをチェックしてみてください。
コンパイルエラーです。文法上間違いがあった場合です。お手持ちの実行環境でちゃんと動くか再度試してみてください。
ランタイムエラーです。何かしら問題が発生しました。
()内に詳細な原因がでるので、それで原因を特定します。
(NZEC)は、C言語とかで最後に「return 0;」が無いと発生します。main関数の戻り値で「return 0;」を入れれば解決します。(他の言語は分かりませんが、多分同じかと)
(SIGSEGV)は、いわゆるセグメンテーションフォルトです。メモリ壊したときとか、ポインタが実装されてる言語で変なとこにアクセスしたとかで発生します。頑張って直しましょう。
英語読める方はSPOJのtutorialsの下の方に詳しく書いてあるので、そちらも参考にするとよいと思います。
こうして、問題を解く→判定→accepted!を繰り返すのがこのSphere Online Judgeです。
問題はたくさんあるので、最初のうちは解けそうな問題や、多くの人がやっている問題(「problems」でUSERSカラムでソートすれば分かります)に挑戦してみるのがいいかもしれません。
問題によっては、「良く使うアルゴリズム」が出てくることもあります。お近くの「すごい人」や、Google先生や、枕になりそうな本に尋ねてみると良いヒントがもらえるかもしれません。
あと、最近は「プログラミングコンテンツ チャレンジブック」という本が出てました。これもエッセンスが詰まっているので良いかもしれません。
【送料無料】プログラミングコンテス... |
Sphere Online Judgeの目標は人それぞれです。自分の目標とaccepted目指して、頑張ってください。
何かありましたら、コメント欄かメールにてどうぞ。
あと、念のため。この記事はSphere Online Judgeの運営団体とは一切関係なく、私個人が勝手に書いたものなので、間違いがあるかもしれません。ご容赦を。
Sphere Online Judgeへの参戦方法はこちら
コメント無し
2013年もよろしくお願いいたします!
合計 | 228095 |
12/12 | 20 |
12/11 | 99 |
12/10 | 80 |
12/09 | 93 |
12/08 | 78 |
12/07 | 93 |
12/06 | 98 |
1,722,449 | 秒 |
478 | 時間 |
19 | 日 |
5.4618 | % |