/telegram_opentests

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

Primary LanguageJavaGNU General Public License v3.0GPL-3.0

Telegram Open Tests

Зачем?

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

На данный момент Codeforces не поддерживает такой тип задач, а их добавление на Яндекс.Контест гораздо сложнее, чем должно быть. Этот бот даёт простой способ проводить тренировочные соревнования по открытым тестам.

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

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

Форкните этот репозиторий и создайте класс, наследующий от OpenTestsBot. Он должен выглядеть так:

import com.mechakotik.TelegramOpenTests.OpenTestsBot;

public class MyProblemBot extends OpenTestsBot {
    public MyProblemBot() throws Exception {
        super();
    }

    // Верните имя пользователя бота
    @Override
    public String getBotUsername() {return null;}

    // Верните API токен бота
    @Override
    public String getBotToken() {return null;}

    // Верните количество тестов в задаче
    @Override
    public int getNumTests() {return 10;}

    // Верните URL адрес на условие, который будет отображаться в сообщении /help
    @Override
    public String getStatementURL() {return null;}

    // Верните URL адрес на архив с тестами, который будет отображаться в сообщении /help
    @Override
    public String getTestsURL() {return null;}

    // Проверьте ответ на тест с номером testNumber (в 1-индесации), находящийся в файле по пути outputPath. Верните вердикт и баллы за тест
    @Override
    public CheckResult checkSolution(String outputPath, int testNumber) throws Exception {
        return new CheckResult("OK", 0);
    }
}

Пример класса бота для задачи "Мультипликативный кроссворд".

Наконец, создайте основной класс программы и запустите бота оттуда. Если вы назвали класс бота MyProblemBot, основной класс должен выглядеть так:

public class Main {
    public static void main(String[] args) throws Exception {
        TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class);
        botsApi.registerBot(new MyProblemBot());
    }
}