Skip to content

Telegram бот для проведения тренировок по открытым тестам

License

Notifications You must be signed in to change notification settings

mechakotik/TelegramOpenTests

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Telegram Open Tests

Зачем?

Задачи с открытыми тестами — тип задач в олимпиадном программировании, где тесты к задаче доступны для скачивания, а на проверку нужно сдать не код, а ответы на тесты. Обычно это NP-полные задачи с частичной оценкой за тест. Этот бот даёт простой способ проводить тренировочные соревнования по открытым тестам.

Как использовать?

Создайте Telegram бота через @BotFather и получите API токен (следуйте этой инструкции).

Скачайте последнюю версию бота в Releases. Если у вас ещё не установлена JRE, скачайте и установите её по ссылке. Создайте в одной папке с ботом файл с именем config.toml и следующим содержанием:

[bot]
username = ""
token = ""

[problem]
num_tests = 10
checker_command = []
statement_url = ""
tests_archive_url = ""

Вся настройка бота происходит в этом файле. Заполните параметры в соответствии с вашим ботом и задачей. Вот описание всех опций с примерами:

Опция Описание Пример
username Имя пользователя бота, которое вы выбрали при его создании в @BotFather "opentests_bot"
token API токен бота, который вы получили от @BotFather "4839574812:AAFD39kkdpWt3ywyRZergyOLMaJhac60qc"
num_tests Количество тестов в задаче 10
checker_command Шаблон команды для запуска чекера (см. ниже) ["./checker", "%test%", "%output%"]
statement_url Ссылка на условие задачи, отображается при запуске и в команде /help "https://example.com/statement.pdf"
tests_archive_url Ссылка на архив с тестами, отображается при запуске и в команде /help "https://example.com/tests.zip"

Чекер

Чекер должен принимать на вход номер теста и путь к выходному файлу, который нужно проверить. Он должен вывести в stdout две строки: в первой строке — вердикт (OK, WA, PE), а во второй — баллы за тест.

Опция checker_command должна содержать шаблон команды для запуска чекера — список строк, содержащий исполняемый файл чекера и его аргументы. При запуске команды подстрока %test% будет заменяться на номер теста (в 1-индексации), а подстрока %output% - на путь к выходному файлу.

Например, можно передавать чекеру номер теста в первом аргументе и путь к выходному файлу во втором. Тогда команда для запуска чекера может выглядеть так:

checker_command = ["checker.exe", "%test%", "%output%"]     # Windows
checker_command = ["./checker", "%test%", "%output%"]       # Linux

Сам чекер будет считывать параметры следующим образом:

#include <iostream>
#include <string>

int main(int argc, char** argv) {
    int test_number = std::stoi(argv[1]);
    std::string output_path = argv[2];

    // Проверить решение

    std::cout << "OK" << std::endl << 0 << std::endl;
}

About

Telegram бот для проведения тренировок по открытым тестам

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages