Чекер задачі

Чекер задачі — це спеціальна програма, яка використовується для перевірки рішень під час тестування. Він запускається після завершення програми учасника і визначає, чи є його відповідь правильною. Чекер має доступ до трьох файлів: вхідного файлу (input.txt), файлу з очікуваною відповіддю (answer.txt) та файлу з відповіддю учасника (output.txt).

Eolymp пропонує кілька вбудованих чекерів, а також можливість написати власний чекер на одній із підтримуваних мов програмування.

Як налаштувати чекер

Щоб налаштувати чекер для вашої задачі, виконайте наступні кроки:

  1. Відкрийте консоль та виберіть простір, де розміщена ваша задача.

  2. У лівому меню перейдіть до розділу Задачі.

  3. Виберіть задачу, яку хочете змінити.

  4. У меню задачі перейдіть до розділу Тестування.

Натисніть Чекер для його налаштування.

Рис. 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).

Цей чекер ідеально підходить для задач, де потрібно порівняти значущі токени (слова або числа), ігноруючи пробіли та форматування. Однак для задач з великими обсягами даних він може бути занадто повільним. У таких випадках рекомендується використовувати чекер "рядок за рядком" або написати власний.

Власний чекер

Ви також можете написати власний чекер, використовуючи опцію "Порівнювати за допомогою програми". Ця програма-чекер буде виконуватися після завершення програми учасника, за умови, що програма завершилася успішно, без помилок, перевищення часу або ліміту пам’яті.

Ваша програма-чекер компілюється і виконується з наступними аргументами:

  1. Вхідний файл (input.txt).

  2. Відповідь учасника (output.txt).

  3. Очікувана відповідь (answer.txt).

Наприклад, чекер запускається так:

checker input.txt output.txt answer.txt

У C++ ці параметри можна зчитати через другий параметр функції main.

Чекер повинен повернути код виходу 0, якщо відповідь учасника правильна. Будь-який інший код виходу означає, що відповідь неправильна.