-
Notifications
You must be signed in to change notification settings - Fork 3
Problems
コンテスト用ではない新しい問題を作成する。
POST /problems/new
Content-Type: application/json
{
"title": "タイトル",
"body": "問題文",
"inputFormat": "入力形式",
"outputFormat": "出力形式",
"constraints": "制約",
"samples": [
{
"input": "入力例",
"output": "出力例"
}
],
"timeLimit": 1000000000,
"memoryLimit": 256,
"judgeType": 2,
"judgementConfig": {
"judgeSourceCode":"int main(){}",
"languageID": 1
}
}
timeLimit
の単位はナノ秒、memoryLimit
の単位はMiB。
時間制限は1秒以上60秒以下、メモリ制限は128MiB以上512MiB以下にする必要がある。
judgeSourceCode
はオプション(スペシャルジャッジを使うときに必要)。
-
0
: 入力ファイルと出力ファイルを使う普通のジャッジ -
1
: 誤差許容 -
2
: スペシャルジャッジ。解が一つでない、特別な部分点の計算が必要な問題に使う。
judgeType
を0
以外にした時は、judgementConfig
が必要。
judgeSourceCode
は解の検証コード
誤差許容ジャッジは、出力を空白区切で数値の場合は誤差の判定を、それ以外は文字列として比較されるジャッジ。数値の絶対誤差または相対誤差の大きさがjudgementConfig.difference
以下であれば等しいと判定される。
解の検証コードは次のよう実行される。
command (テストケースの入力ファルのパス) (テストケースの出力ファイルのパス) (提出コードの出力ファイルのパス) (提出コードのパス)
例)
./a.out input1-1.txt output1-1.txt output.txt main.cpp
検証コードが終了コード0
で終了するとACに、0
以外の終了コードで終了するとWAになる。
検証コードは次の形式でテストケースに対する得点(非負整数)を出力する必要がある。
point
例)
10
ケースセット内のすべてのテストケースでACすると、点数が得られる。このとき、min(検証コードが出力した点数の総和, ケースセットに設定された点数)
が得点となる。(普通にケースセットに設定した点数を使いたいときは、十分に大きい数字を出力すればいい)。どれか1つのテストケースでもAC以外になると、そのケースセットで得られる得点は0になる。
検証コードのコンパイルに失敗したり、終了コードが0
かつ不正な出力をしたときは、Unknown Error
になる(多分)。
201 Created
Content-Type: application/json
{
"id": 12,
"writerID": 2,
"writer": {
"id": 2,
"name": "hoge",
"displayName": "hoge",
"email": "[email protected]",
"authority": 0
},
"createdAt": "2018-03-08T18:09:27.263437486+09:00",
"updatedAt": "2018-03-08T18:09:27.263437486+09:00",
"title": "タイトル",
"body": "問題文",
"inputFormat": "入力形式",
"outputFormat": "出力形式",
"constraints": "制約",
"samples": [{
"ID": 11,
"ProblemID": 12,
"Input": "入力例",
"Output": "出力例",
"Description": ""
}],
"timeLimit": 1000000000,
"memoryLimit": 256,
"judgeType": 2,
"contestID": 0,
"judgementConfigID": 4,
"judgementConfig": {
"id": 4,
"judgeSourceCode": "int main(){}",
"languageID": 1,
"language": {
"id": 1,
"displayName": "C++17 (GCC 7.2.0)",
"compileCommand": "g++ -w -lm -std=gnu++17 -O2 -o main.o main.cpp",
"execCommand": "./main.o"
},
"difference": 0
}
}
コンテスト用の問題ではないので、contestID
は常に0
。
コンテストの問題は取得できないので、contests/:contestID/problems/:id
を使う。
GET /problems/:id
200 OK
Content-Type: application/json
{
"id": 1,
"createdAt": "2014-08-25T00:00:00+09:00",
"updatedAt": "2014-08-25T00:00:00+09:00",
"writer": {
"id": 1,
"name": "hoge",
"displayName": "ほげ",
"authority": 0
},
"title": "タイトル",
"body": "問題文",
"inputFormat": "入力形式",
"outputFormat": "出力形式",
"constraints": "制約",
"samples": [
{
"input": "入力例",
"output": "出力例"
}
],
"timeLimit": 1000000000,
"memoryLimit": 256,
"judgeType": 0,
"contestID": 0
}
judgeSourceCode
は自分がwriterであったときにしか返されない
PUT /problems/:id
Content-Type: application/json
{
"title": "タイトル",
"body": "問題文",
"inputFormat": "入力形式",
"outputFormat": "出力形式",
"constraints": "制約",
"samples": [
{
"input": "入力例",
"output": "出力例"
}
],
"timeLimit": 1000000000,
"memoryLimit": 256,
"judgeType": 0
}
200 OK
Content-Type: application/json
{
"id": 1,
"createdAt": "2018-01-06T20:32:38+09:00",
"updatedAt": "2018-01-06T20:32:38+09:00",
"writer": {
"id": 1,
"name": "hoge",
"displayName": "ほげ",
"authority": 0
},
"title": "タイトル",
"body": "問題文",
"inputFormat": "入力形式",
"outputFormat": "出力形式",
"constraints": "制約",
"samples": [
{
"input": "入力例",
"output": "出力例"
}
],
"caseSets":[
{
"id": 1,
"createdAt": "2018-01-06T20:32:38+09:00",
"updatedAt": "2018-01-06T20:32:38+09:00",
"problemID": 1,
"point": 0
}
],
"timeLimit": 1000000000,
"memoryLimit": 256,
"judgeType": 0,
"contestID": 0
}
DELETE /problems/:id
204 No Content
コンテスト用ではない問題を取得する
GET /problems
-
minID
: デフォルトは0。idがminID <= idであるような問題を取得する -
maxID
: idが id <= maxIDであるような問題を取得する。0にすると無視される。デフォルトは0。 -
count
: 最大でcount個の問題を取得する。0にすると無制限。デフォルトは0。
200 OK
Content-Type: application/json
[
{
"id": 1,
"createdAt": "2018-01-06T20:32:38+09:00",
"updatedAt": "2018-01-06T20:32:38+09:00",
"writer": {
"id": 1,
"name": "hoge",
"displayName": "ほげ",
"authority": 0
},
"title": "タイトル",
"body": "問題文",
"inputFormat": "入力形式",
"outputFormat": "出力形式",
"constraints": "制約",
"samples": [
{
"input": "入力例",
"output": "出力例"
}
],
"caseSets":[
{
"id": 1,
"createdAt": "2018-01-06T20:32:38+09:00",
"updatedAt": "2018-01-06T20:32:38+09:00",
"problemID": 1,
"point": 0
}
],
"timeLimit": 1000000000,
"memoryLimit": 256,
"judgeType": 0
"contestID": 0
}
]
テストケースをzipファイルでアップロードする。
各ケースファイルの名前はinput[セット番号]-[ケース番号].txt
output[セット番号]-[ケース番号].txt
のようにする。
ディレクトリ構造とファイル名の例
/
├── input1-1.txt
├── input1-2.txt
├── input2-1.txt
├── input2-2.txt
├── input2-3.txt
├── output1-1.txt
├── output1-2.txt
├── output2-1.txt
├── output2-2.txt
└── coutput2-3.txt
POST /problems/:id/cases/upload
Content-Type: application/zip
200 OK
Content-Type: application/json
[
{
"id": 5,
"createdAt": "2018-01-13T14:36:24+09:00",
"updatedAt": "2018-01-13T14:36:24+09:00",
"problemID": 1,
"point": 0
},
{
"id": 6,
"createdAt": "2018-01-13T14:36:24+09:00",
"updatedAt": "2018-01-13T14:36:24+09:00",
"problemID": 1,
"point": 0
}
]
点数はセットごとに設定する。点数は0以上である必要がある。
PUT /problems/:id/cases
Content-Type: application/json
[
10,
10,
80
]
204 No Content
問題に対するすべての提出をリジャッジする。
POST /problems/:id/rejudge
204 No Content