Чекер задачі — це спеціальна програма, яка використовується для перевірки рішень під час тестування. Він запускається після завершення програми учасника і визначає, чи є його відповідь правильною. Чекер має доступ до трьох файлів: вхідного файлу (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").
При використанні цього чекера необхідно вказати:
Точність порівняння чисел.
Чутливість до регістру при порівнянні рядків.
Для порівняння чисел використовується така формула:
Де:
— це відповідь учасника.
— це правильна відповідь.
— це параметр точності, вказаний у задачі.
Якщо , формула спрощується до . Для порівняння чисел використовується тип даних long double (float64).
Цей чекер ідеально підходить для задач, де потрібно порівняти значущі токени (слова або числа), ігноруючи пробіли та форматування. Однак для задач з великими обсягами даних він може бути занадто повільним. У таких випадках рекомендується використовувати чекер "рядок за рядком" або написати власний.
Ви також можете написати власний чекер, використовуючи опцію "Порівнювати за допомогою програми". Ця програма-чекер буде виконуватися після завершення програми учасника, за умови, що програма завершилася успішно, без помилок, перевищення часу або ліміту пам’яті.
Ваша програма-чекер компілюється і виконується з наступними аргументами:
Вхідний файл (input.txt).
Відповідь учасника (output.txt).
Очікувана відповідь (answer.txt).
Наприклад, чекер запускається так:
checker input.txt output.txt answer.txt
У C++ ці параметри можна зчитати через другий параметр функції main.
Чекер повинен повернути код виходу 0, якщо відповідь учасника правильна. Будь-який інший код виходу означає, що відповідь неправильна.