オンラインジャッジへの課題提出について

本講義では、オンラインジャッジサーバを利用して課題提出、中間・期末試験を行います。

オンラインジャッジとは?

与えられた問題を解くプログラムを作成したのち、それが正しいプログラムかどうかを即時に自動判定するサーバをジャッジサーバという。

online-judge

解答プログラムはサーバ上でコンパイル(ビルド)される。サーバ上で実行可能となったプログラムは、標準入力 (STDIN) に入力が与えられ、問題を解いた結果を標準出力 (STDOUT) に出力する。サーバはプログラムの出力と正解を比較し、一致すれば ACCEPT となる。コンパイルに失敗したり、出力が一致しなければ WRONG となる。サーバ上で試される入力と出力の組が1つとは限らない。

問題の例

入力された整数の合計を求めよ。

入力

1行目に整数の個数nが与えられる。 2行目にn個の整数x_1, …, x_nが空白区切りで与えられる。

出力

x_1, …, x_nの合計

制約

  • 0 <= n <= 1000
  • x_i (1 <= i <= n) は整数

Sample Input 1

5
1 2 3 4 5

Sample Output 1

15

問題中にある入出力例はもちろんのこと、それ以外の入力が与えられた時でも題意に沿った解答を出力しなければならない。 上記の問題の解答はたとえば以下のようになるだろう。

#include <stdio.h>
int main(void)
{
    int i, n, x, s=0;
    scanf("%d", &n);
    for (i=0; i<n; i++) {
        scanf("%d", &x);
        s += x;
    }
    printf("%d\n", s);
    return 0;
}

本講義における課題提出までの流れ

1. ログイン

Sharif Judge <prog@dna.bio.keio.ac.jp> から送られてきたUsernameとPasswordを使ってSharif Judge (https://www.dna.bio.keio.ac.jp/sj/) にログインする。

login

2. Assignmentsから問題セットを選ぶ

左のパネルから「Assignments」を選び、問題セット一覧から問題セットを1つ選ぶ。解くべき問題セットは講義内で指定する。これが毎回の課題に相当する。

assignments

3. Problemsから問題を選ぶ

左のパネルから「Problems」を選ぶ。問題セットに含まれる問題一覧が右側に現れるので、解きたい問題を選ぶ。中央には問題文が現れる。

problems

4. 問題文を読んで解答プログラムを作成する

問題文には、問題の詳細および入力と出力に関する説明が書かれている。入出力の例が添付されている場合もある。 解答プログラムを適当なエディターで作成し、ファイルを保存する。

5. Submitで解答プログラムを投稿する。

左のパネルから「Submit」を選ぶ。「Problem」を解いた問題、「Language」をCとし、「File」にプログラムファイルをアップロードして、最後に「Submit」を押す。 この時にアップロードするファイルは*.cという形式のファイルである。

submit

6. 判定

Submitすると「All Submissions」に遷移するので、判定を待つ。「Status」がPENDINGの時は判定中である。ときどき、左パネルの「All Submissions」を選ぶと更新される。 「Status」が緑色の場合はACCEPT、赤色の場合はWRONGである。

submissions

同じ問題に対して何回でもSubmitすることが可能である。その場合には、どのプログラムを最終的な解答にするかを「Final」で選択する。Submitしたプログラムのうち「Final」で指定したものが採点の対象となる。

注意点

  1. サブミットする前にAssignmentの選択を間違えていないか確認してください。
  2. サブミットする時、ファイル名は短くしてください。main.cなどが良いと思います。あまり長いファイル名にしてしまうと、ジャッジサーバが判定を行わないという不具合が見つかりました。
  3. とくに指定がある場合を除き、プログラムからprintf等で何かを出力する際には行頭に空白文字が入らないようにしてください。空白文字が行頭に入っていると判定に失敗する場合があります。
  4. 出力の最後の行に改行\nを入れるのを忘れないでください。これも、忘れてしまうと判定に失敗する場合があります。
  5. \(バックスラッシュ)の代わりに¥(円記号)を使うと判定がうまくいかないことがあります。

Updated: