code-olymp-tester

0.0.0-s1 • Public • Published

CodeOlympTester

Table of Contents

  1. Installation
  2. Task structure
  3. Solution structure
  4. Solution running
  5. Slots
  6. Slot managers

Installation

  • Init node project
  • Type this in console
npm i code-olymp-tester

Task structure

Normal problem

{
  "title": "test",
  "content": "Test problem",
  "format": "tex || md || html || pdf",
  "timeLimit": 200,
  "ramLimit": 100,
  "tests": [
    {
      "text": "4 4\n0 1\n1 2\n2 3\n3 0\n",
      "files": {}
    },
    {
      "text": "4 3\n0 1\n1 2\n2 3\n",
      "files": {}
    }
  ],
  "interactive": false,
  "checker": {
    "default": true,
    "endls": false,
    "spaces": false,
    "trim": true,
    "structure": [
      {
        "var": "n",
        "type": 1
      },
      {
        "count": "n",
        "value": {
          "count": "n",
          "type": 1
        }
      }
    ],
    "info": null,
    "tests": [
      {
        "correctAnswers": [
          "4\n0 1 0 0\n0 0 1 0\n0 0 0 1\n1 0 0 0"
        ],
        "info": null,
        "vars": {}
      },
      {
        "correctAnswers": [
          "4\n0 1 0 0\n0 0 1 0\n0 0 0 1\n0 0 0 0"
        ],
        "info": null,
        "vars": {}
      }
    ],
    "stdout": true
  }
}

Custom checker problem

{
  "title": "test",
  "content": "Test problem",
  "format": "tex || md || html || pdf",
  "timeLimit": 200,
  "ramLimit": 100,
  "tests": [
    {
      "text": "4 4\n0 1\n1 2\n2 3\n3 0\n",
      "files": {}
    },
    {
      "text": "4 3\n0 1\n1 2\n2 3\n",
      "files": {}
    }
  ],
  "interactive": false,
  "checker": {
    "info": null,
    "tests": [
      {
        "correctAnswers": [
          "4\n0 1 0 0\n0 0 1 0\n0 0 0 1\n1 0 0 0"
        ],
        "info": null,
        "vars": {}
      },
      {
        "correctAnswers": [
          "4\n0 1 0 0\n0 0 1 0\n0 0 0 1\n0 0 0 0"
        ],
        "info": null,
        "vars": {}
      }
    ],
    "default": false,
    "useCorrectAnswers": true,
    "cmd": "checker.exe",
    "files": {
      "checker.exe": "./checker.exe",
      "in.txt": "./in.txt"
    }
  }
}

Interactive problem

{
  "title": "test",
  "content": "Test problem",
  "format": "tex || md || html || pdf",
  "timeLimit": 200,
  "ramLimit": 100,
  "testsCount": 2,
  "interactive": true,
  "interactor": {
    "cmd": "interactor.exe",
    "files": {
      "interactor.exe": "./interactor.exe",
      "in.txt": "./in0.txt"
    },
    "info": null,
    "tests": [
      null,
      null
    ]
  }
}

Solution output structure

problem.checker.structure

[
  {
    "var": "n",
    "type": 1
  },
  {
    "count": "n",
    "value": {
      "count": "n",
      "type": 1
    }
  }
]

Solution structure

{
  "files": {
    "solution.js": "./solution.js"
  },
  "cmd": "node solution.js"
}

Solution running

import {runFromJSON} from "code-olymp-tester";
import * as fs from "fs";

runFromJSON(
    fs.readFileSync("./someProblem.json", {encoding: "utf8"}),
    fs.readFileSync("./someSolution.json", {encoding: "utf8"})
).then(response => {
    console.log(response.responsesMainData, response.responses.map(elem => elem.status), response.status);
});

Slots

import {Slot} from "code-olymp-tester";
import * as fs from "fs";

let slot = new Slot("./test");

slot.runFromJSON(
    fs.readFileSync("./someProblem.json", {encoding: "utf8"}),
    fs.readFileSync("./someSolution.json", {encoding: "utf8"})
).then(response => {
    console.log(response.responsesMainData, response.responses.map(elem => elem.status), response.status);
});

slot.runFromJSON(
    fs.readFileSync("./someProblem.json", {encoding: "utf8"}),
    fs.readFileSync("./someSolution2.json", {encoding: "utf8"})
).then(response => {
    console.log(response.responsesMainData, response.responses.map(elem => elem.status), response.status);
});

slot.runFromJSON(
    fs.readFileSync("./someProblem2.json", {encoding: "utf8"}),
    fs.readFileSync("./someSolution3.json", {encoding: "utf8"})
).then(response => {
    console.log(response.responsesMainData, response.responses.map(elem => elem.status), response.status);
});

Slot managers

import {SlotManager} from "code-olymp-tester";
import * as fs from "fs";

let slotManager = new SlotManager("./test", 2);

slotManager.runFromJSON(
    fs.readFileSync("./someProblem.json", {encoding: "utf8"}),
    fs.readFileSync("./someSolution.json", {encoding: "utf8"})
).then(response => {
    console.log(response.responsesMainData, response.responses.map(elem => elem.status), response.status);
});

slotManager.runFromJSON(
    fs.readFileSync("./someProblem.json", {encoding: "utf8"}),
    fs.readFileSync("./someSolution2.json", {encoding: "utf8"})
).then(response => {
    console.log(response.responsesMainData, response.responses.map(elem => elem.status), response.status);
});

slotManager.runFromJSON(
    fs.readFileSync("./someProblem2.json", {encoding: "utf8"}),
    fs.readFileSync("./someSolution3.json", {encoding: "utf8"})
).then(response => {
    console.log(response.responsesMainData, response.responses.map(elem => elem.status), response.status);
});

Readme

Keywords

none

Package Sidebar

Install

npm i code-olymp-tester

Weekly Downloads

1

Version

0.0.0-s1

License

none

Unpacked Size

61.7 kB

Total Files

19

Last publish

Collaborators

  • sizoff