Чекер задачі
Чекер задачі — це спеціальна програма, яка використовується для перевірки рішень під час тестування. Він запускається після завершення програми учасника і визначає, чи є його відповідь правильною. Чекер має доступ до трьох файлів: вхідного файлу (input.txt), файлу з очікуваною відповіддю (answer.txt) та файлу з відповіддю учасника (output.txt).
Eolymp пропонує кілька вбудованих чекерів, а також можливість написати власний чекер на одній із підтримуваних мов програмування.
Як налаштувати чекер
Щоб налаштувати чекер для вашої задачі, виконайте наступні кроки:
Відкрийте консоль та виберіть простір, де розміщена ваша задача.
У лівому меню перейдіть до розділу Задачі.
Виберіть задачу, яку хочете змінити.
У меню задачі перейдіть до розділу Тестування.
Натисніть Чекер для його налаштування.
Рис. 1. Форма налаштування чекера
Типи чекерів
Без чекера
Якщо для оцінювання використовується інтерактор, ви можете відключити чекер повністю. У цьому випадку інтерактор буде визначати, чи є відповідь правильною. Якщо ні інтерактор, ні чекер не налаштовані, процес тестування завершиться з помилкою.
Чекер "рядок за рядком"
Цей чекер порівнює файли answer.txt та output.txt рядок за рядком. Якщо хоча б один символ (байт) відрізняється, відповідь учасника буде вважатися неправильною.
Щоб полегшити форматування для учасників, чекер ігнорує:
Пробіли та табуляцію в кінці кожного рядка.
Порожні рядки в кінці файлу.
Використовуйте цей чекер, коли відповідь учасника повинна точно збігатися з очікуваною (output.txt і answer.txt повинні бути ідентичними).
Чекер "по токенах"
Чекер по токенах порівнює файли answer.txt і output.txt слово за словом або число за числом. Він визначає метод порівняння залежно від типу даних у файлі answer.txt. Якщо answer.txt містить число, то і output.txt має містити число. Якщо в answer.txt міститься слово (рядок), то і в output.txt повинно бути слово. Числа порівнюються з вказаною точністю, а слова — з урахуванням регістру (наприклад, "AA" == "aa").
При використанні цього чекера необхідно вказати:
Точність порівняння чисел.
Чутливість до регістру при порівнянні рядків.
Для порівняння чисел використовується така формула:
Де:
— це відповідь учасника.
— це правильна відповідь.
— це параметр точності, вказаний у задачі.
Якщо B = 0, формула спрощується до |A| ≤ \epsilon. Для порівняння чисел використовується тип даних long double (float64).
Цей чекер ідеально підходить для задач, де потрібно порівняти значущі токени (слова або числа), ігноруючи пробіли та форматування. Однак для задач з великими обсягами даних він може бути занадто повільним. У таких випадках рекомендується використовувати чекер "рядок за рядком" або написати власний.
Власний чекер
Ви також можете написати власний чекер, використовуючи опцію "Порівнювати за допомогою програми". Ця програма-чекер буде виконуватися після завершення програми учасника, за умови, що програма завершилася успішно, без помилок, перевищення часу або ліміту пам’яті.
Ваша програма-чекер компілюється і виконується з наступними аргументами:
Вхідний файл (
input.txt).Відповідь учасника (
output.txt).Очікувана відповідь (
answer.txt).
Наприклад, чекер запускається так:
checker input.txt output.txt answer.txtУ C++ ці параметри можна зчитати через другий параметр функції main.
Чекер повинен повернути код виходу 0, якщо відповідь учасника правильна. Будь-який інший код виходу означає, що відповідь неправильна.