Задачи с открытыми тестами - тип задач в олимпиадном программировании, где тесты к задаче доступны для скачивания, а на проверку нужно сдать не код, а ответы на тесты. Обычно это 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());
}
}