Skip to content
This repository was archived by the owner on Feb 5, 2024. It is now read-only.

Problems

Ryota Egusa edited this page Jan 9, 2019 · 9 revisions

目次

🔒問題を作成

コンテスト用ではない新しい問題を作成する。

リクエスト

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はオプション(スペシャルジャッジを使うときに必要)。

JudgeType

  • 0: 入力ファイルと出力ファイルを使う普通のジャッジ
  • 1: 誤差許容
  • 2: スペシャルジャッジ。解が一つでない、特別な部分点の計算が必要な問題に使う。

judgeType0以外にした時は、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