Создание своей задачи

Генерация шаблона задачи

Для удобной работы с задачами есть TestsGeneratorFramework Скачиваем его и заходим в основную папку, где есть manager.py

Для генерации задачи вводим в консоль ({NAME} - имя задачки)

python manager.py create {NAME} -f -e 

На Linux, возможно, потребуется запустить через команду python3

python3 manager.py create {NAME} -f -e

После этого в папке programms появилась наша папка( В примере {NAME} = test}

Теперь давайте рассмотрим содержимое файла build.py.

examples - словарь, где ключ - входные данные, значение - выходные input_data - список с входными значениями, с которыми сгенерируются тесты

Для большего понимания рассмотрим страницу с задачей, что именно куда подставляется. И попробуем сделать такую же задачу

Свои тесты для программы

Примеры напишем сами, а вот входные данные сгенерируем с помощью программы. Изменяем build.py и эталон программы

main.py
n = int(input())
if n % 2 == 0:
    print("YES"
else:
    print("NO")
build.py
from core.runner import Runner
from random import randint

runner = Runner()

examples = {
    "2": "YES",
    "3": "NO",
}

input_data = []

for i in range(30):
    input_data.append(randint(0, 100))

out = runner.run_many(input_data)
runner.save_tests(out, input_data)
runner.save_examples(examples)
runner.build(indent=2)
print("[+] Done")

Изменяем описание

Система может воспринимать формат текста Markdown. [Примеры формата]

Также изменяем описание, входные и выходные данные. Показывать не буду, т.к будет много текста. Просто напишу везде test

Все файлы
name.txt
test
description.txt
test
in_data.txt
test
out_data.txt
test

Генерация задачи

После всех шагов, запускаем build.py

Вывод
[/] Tests are running 
30/30 
[+] Tests was built
[/] Building export 
[+] Export was built 
[+] Done

У нас появился файл build.json . Это и есть наша сгенерированная задача. Ее мы будет загружать на платформу

Этот файл содержит все данные, тесты, примеры.

build.json
{
  "name": "test",
  "description": "test",
  "in": "test",
  "out": "test",
  "examples": [
    ["2", "YES"],
    ["3", "NO"]
  ],
  "tests": [
    [
      "87",
      "NO"
    ],
    [
      "11",
      "NO"
    ],
    [
      "73",
      "NO"
    ],
    [
      "40",
      "YES"
    ],
    [
      "97",
      "NO"
    ],
    [
      "51",
      "NO"
    ],
    [
      "9",
      "NO"
    ],
    [
      "80",
      "YES"
    ],
    [
      "70",
      "YES"
    ],
    [
      "75",
      "NO"
    ],
    [
      "7",
      "NO"
    ],
    [
      "56",
      "YES"
    ],
    [
      "62",
      "YES"
    ],
    [
      "14",
      "YES"
    ],
    [
      "32",
      "YES"
    ],
    [
      "53",
      "NO"
    ],
    [
      "25",
      "NO"
    ],
    [
      "0",
      "YES"
    ],
    [
      "23",
      "NO"
    ],
    [
      "74",
      "YES"
    ],
    [
      "82",
      "YES"
    ],
    [
      "19",
      "NO"
    ],
    [
      "99",
      "NO"
    ],
    [
      "56",
      "YES"
    ],
    [
      "41",
      "NO"
    ],
    [
      "43",
      "NO"
    ],
    [
      "54",
      "YES"
    ],
    [
      "57",
      "NO"
    ],
    [
      "14",
      "YES"
    ],
    [
      "57",
      "NO"
    ]
  ]
}

Готово!

Last updated