Вас вітає Алготестер!
Що таке Алготестер?
Система автоматичного тестування розв’язків з великим набором цікавих алгоритмічних задач різноманітної складності.
Платформа для підготовки задач.
Платформа для проведення змагань з олімпіадного програмування за правилами ICPC та IOI.
Платформа для проведення оптимізаційних змагань.
Що потрібно зробити, щоб почати користуватись Алготестером?
Для початку роботи з Aлготестером потрібно пройти швидку реєстрацію. Для цього перейдіть на сторінку реєстрації за допомогою кнопки у правому верхньому куті. У полі "Ім’я користувача" потрібно ввести унікальне ім’я користувача за яким Вас буде ідентифікувати система. Воно повинно:
Бути унікальним.
Мати довжину від 4 до 47 символів.
Містити великі та малі латинські літери, цифри, крапку та нижнє підкреслення.
Починатися з букви.
У полях "Ім’я" та "Прізвище" введіть свої справжні ім’я та прізвище. У полі "Електронна скринька" введіть Вашу електронну скриньку. Ви повинні мати доступ до неї для підтвердження облікового запису. У полі "Пароль" введіть свій пароль, який використовуватимете для входу в систему. Пароль повинен мати від 4 до 47 символів, та бути надійним. Продублюйте ваш пароль у полі "Підтвердження пароля". Погодьтеся з умовами та правилами використання платформи Алготестер.
Після заповнення форми, зайдіть на свою електронну пошту та очікуйте на лист підтвердження облікового запису. Підтвердіть ваш облікового запису.
Я хочу спробувати розв’язати одну дуже просту задачу і, якщо сподобається, то більше.
Повний список задач в архіві можна знайти в секції Задачі в лівому меню.
Найпростіша задача архіву — задача A плюс B. Нижче наведені приклади кодів для її розв’язання використовуючи всі доступні мови програмування.
Для того щоб надіслати розв’язок потрібно вибрати спосіб надсилання коду (файл чи вихідний код) та компілятор. В залежності від способу надсилання потрібно прикріпити файл або вставити вихідний код Вашої програми у відповідне поле, та натиснути "Надіслати".
У табличці нижче будуть доступні всі розв’язки, які були надіслані Вами по вибраній задачі, а також результат виконання кожного з них. Ви можете детально подивитися на кожну свою спробу. Ви можете бачити надісланий код, вивід компілятора та результат виконання кожного тесту. Тестування відбувається до першого не пройденого тесту.
У вкладці "Успішні розв’язки" Ви можете бачити список всіх користувачів, які розв’язали дану задачу, та результат виконання їхнього коду.
Я отримав результат "Неправильна відповідь" на задачі "A плюс B".
Це означає, що ваш розв’язок є наразі неправильним і на деяких вхідних даних, які дозволені згідно з умовою, Ваша програма повертає неправильну відповідь до задачі. Ось список усіх можливих вердиктів:
Неправильна відповідь На деяких вхідних даних, які дозволені згідно з умовою, ваша програма повертає неправильну відповідь до задачі. Помилка часу виконання Програма неочікувано завершила роботу (наприклад була спроба поділити на 0, або індексувати за межами масиву). Перевищено ліміт часу Програма працює на одному тесті повільніше, ніж ліміт, зазначений в умові задачі. Перевищено ліміт пам’яті Програма використовує на одному тесті більше оперативної пам’яті, ніж зазначено в умові задачі. Помилка компілювання Компілятор видав помилку при компіляції Вашого вихідного коду. Для того, щоб побачити вивід помилки компілятора перейдіть в перегляд розв’язку у вкладку Компілятор. Внутрішня помилка Помилка в системі тестування і розпорядники платформи працюють над її усуненням. Ліміт часу очікування Інтерактор занадто довго очікує на вивід програми. Ця помилка виникає при порушенні протоколу взаємодії. Зараховано Це єдиний вердикт який хороший для вас — Ваша задача повністю правильна і пройшла всі тести! Де знайти задачі?
У секції Задачі є можливість є можливість:
Впорядкувати задачі за кількість учасників, які її здали. Прості задачі здають частіше ніж складні.
Вибрати тему чи складність задачі за допомогою міток. Натисніть на мітку, або впишіть тему у поле пошуку.
Знайти якусь конкретну задачу за її номером, назвою, або джерелом (назва змагання у якому задача була використана).
Де шукати підказки, якщо в мене не виходить зробити задачу?
У секції Розбір є письмові розбори до деяких задач. Також на нашому ютуб-каналі ви зможете знайти відеорозбори до частини задач.
Чи можу я порівняти свої успіхи в розв’язуванні задач з успіхами інших учасників?
Так, в секції Рейтинг лівого меню доступний повний список учасників, посортований за кількістю розв’язаних задач. Також, в секції Черга розв’язків доступна онлайн черга, в якій показано результати перевірки надісланих Вами та іншими учасниками розв’язків.
Архів це круто, але чи можу я взяти участь у реальному змаганні?
В ЛНУ ім. І. Франка (а також інших університетах Львова), використовуючи платформу Алготестер, регулярно проводять змагання, участь в яких можна приймати онсайт разом з іншими командами. Підписуйтеся на наші сторінки у Facebook, Twitter та Telegram , щоб не пропустити жодної події.
Приклади розв’язку задачі "A плюс B" різними мовами програмування:
C++
C#
Java
Pascal
Python 3
Процес додавання задач у платформу Алготестер
У правому верхньому куті сайту відкрийте вкладку «Задачі (Автор)». У цій секції відображаються всі створені Вами задачі, а також ті задачі, автор яких вказав Вас помічником. Також Ви побачите 5 кнопок: «Створити», «Видалити», «Змінити порядок», «Перетестувати» та «Надіслати».
Натисніть кнопку «Створити». Ви побачите вкладку зі створення задачі. Необхідно зразу вказати 4 обов’язкові поля для створення задачі: «Назва», «Час (сек.)», «Пам’ять (МіБ)» та «Вивід (МіБ)». У полі «Назва» вкажіть назву задачі. Вимоги до назви:
Не використовуйте спеціальні символи (
$&*%
)Назва не повинна бути довгою (не більше семи слів)
Назва повинна бути унікальною. У архіві не повинно бути задач з такою назвою.
Зауважте, що в умові задачі буде та назва, яку Ви вкажете при створенні умови. У полі «Час (сек.)» введіть максимальний час виконання одного тесту у секундах. Стандартне обмеження на час 2 секунди. Обмеження на час повинно бути до 7 секунд.
У полі «Пам’ять (МіБ)» введіть обмеження на використання оперативної пам’яті для одного тесту. Стандартне обмеження на пам’ять 256 Мебібайт. Обмеження на пам’ять повинно бути від 128 Мебібайт до 1024 Мебібайт. Обмеження на пам’ять повинно бути степенем двійки.
Якщо обмеження на час або пам’ять є меншими за стандартні, то переконайтеся що задача розв’язна на Python та Java.
У полі «Вивід (МіБ)» введіть максимальний розмір виводу програми на одному тесті. Стандартне значення виводу 1 Мебібайт.
Обмеження до задачі потрібно вибирати так, щоб вони були хоча б у 2 рази більшими, ніж потребує авторський розв’язок.
Всі інші поля можна буде заповнити пізніше.
Після створення задачі Ви повернетеся до вкладки «Задачі (Автор)». Там буде новостворена вами задача. Натиснувши на назву задачі, Ви перейдете на сторінку налаштувань.
На сторінці налаштування задачі Ви побачите 9 вкладок:
У домашній вкладці (позначається хаткою) Ви можете змінювати обмеження на час та пам’ять, змінювати назву, вибирати першоджерела та ін. Після написання першоджерел, необхідно вибрати їх у цій вкладці. Достовірник (checker) до задачі, можна вибрати одразу.
У вкладці «Помічники» Ви можете додавати помічників до задачі. Ви можете вибрати помічника та присвоїти йому роль яку він буде виконувати при підготовці цієї задачі.
У вкладці «Умови» Ви можете створювати умови українською та англійською мовами. Детальніше про створення умов читайте в пункті «Умови».
У вкладці «Ресурси» Ви можете додавати ресурси до задачі, наприклад картинки до умови.
У вкладці «Першоджерела» Ви можете створювати генератори (generator), перевірники (validator), достовірники (checker), оцінювачі (scorer) та розв’язки. Детальніше про кожен тип Ви зможете прочитати у відповідному пункті наступного розділу.
У вкладці «Тести» Ви можете створювати ручні тести, створювати тести за допомогою генератора або додавати архіви тестів. При створенні тестів вам необхідно вказати їхню назву, вартість та самі тести (в разі створення ручних тестів), або параметри генератора. Якщо Ви хочете зробити цей тест прикладом, який буде відображений в умові, то Вам потрібно поставити прапорець у чекбоксі «приклад». Детальніше про створення тестів генератором читайте у розділі генератор. Детальніше про вартість тестів читайте в пункті «Оцінювач».
У вкладці «Мітки» Ви можете вказувати мітки до задачі.
У вкладці «Результат», після надсилання задачі, Ви можете переглядати створені вами тести, та результат роботи вашого розв’язку.
У вкладці «Розв’язки користувачів» Ви можете переглядати всі розв’язки інших користувачів.
Справа від вкладок будуть 2 кнопки: «Змінити» та «Надіслати».
Етапи створення задач
Умова
Першим кроком створення задачі є створення умови. Умова є обов’язковою частиною задачі. У вкладці «Умова» Ви побачите три кнопки: «Створити», «Видалити» та «Надіслати». Щоб створити умову натисніть на кнопку «Створити».
Умова — дуже важлива частина задачі, де Ви повинні доступно пояснити суть задачі. Умови на Алготестері пишуть мовою розмітки даних LaTeX. При створенні умови Ви побачите 6 вкладок:
У домашній вкладці (позначається хаткою) Ви можете вибрати мову та змінювати назву задачі.
У вкладці «Опис» Ви повинні описати суть задачі, розказати що дано, пояснити що потрібно зробити користувачеві, щоб її здати.
У вкладці «Вхідні дані» Ви повинні описати які дані користувач отримає та в якому порядку та форматі їх задано.
У вкладці «Вихідні дані» Ви повинні описати яку відповідь очікуєте від користувача та у якому форматі він має її вивести.
У вкладці «Обмеження» Ви повинні дати обмеження на всі вхідні дані. Якщо в умові ви гарантували якісь спеціальні обмеження, наприклад відсутність петель чи мультиребер у графі, їх варто згадати й тут.
У вкладці «Примітки» Ви можете пояснити приклади, написати важливе зауваження, яке може бути не очевидним в описі, або ж уточнити деталі які допоможуть користувачеві зрозуміти що саме йому потрібно зробити.
Дотримуйтеся наших рекомендацій щодо написання умов. Після написання умови, для того щоб її згенерувати необхідно натиснути на кнопку «Надіслати». Приклади умов Ви можете знайти в архіві задач.
Розв’язок
Наступним кроком є написання розв’язку до задачі. Розв’язок задачі — це вихідний код, який система буде компілювати та виконувати на наборі тестів, для звірення відповіді з відповідями учасників. У задачі повинен бути один основний розв’язок. Розв’язок повинен зчитувати вхідні дані у форматі, описаному в умові. Вказати основний розв’язок для задачі можна на домашній вкладці (позначається хаткою). Рекомендуємо, щоб кожна задача мала ще й інші розв’язки, написані тестерами, аби уникнути помилок в основному.
Ознайомлення з бібліотеками
На платформі Алготестер існують бібліотеки, які потрібно використовувати для написання першоджерел. Для написання перевірників і достовірників існує бібліотека algotester.h. Ця бібліотека створена, щоб полегшити перевірку вхідних та вихідних даних. Наприклад, метод readInt(47, 74) зчитує вхідні дані до пробілу, або символу нового рядка, перевіряє чи зчитані дані це число, чи воно є в межах від 47 до 74 та повертає його. Опис всіх методів ви можете знайти тут.
Для написання генераторів існує бібліотека algotester_generator.h. Ця бібліотека створена для полегшення написання генераторів для тестів. Наприклад, метод randInt(47, 74) згенерує випадкове число в межах від 47 до 74. Опис всіх методів ви можете знайти тут.
Перевірник
Наступною обов’язковою складовою задачі є перевірник. Перевірник (Validator) — програма яка зчитує один тест і перевіряє чи він відповідає формату й обмеженням, що зазначені в умові. Використовуйте нашу бібліотеку при написанні перевірників до задач. Перевірник зчитує вхідні дані зі стандартного потоку вводу (
STDIN
), та виводить у стандартний потік виводу(STDOUT
). Якщо перевірник виявляє некоректний тест, то він повинен вивести короткий текст-пояснення помилки та повернути 0. Тест вважається коректним якщо перевірник нічого не вивів і повернув 0. Перевірники повинні перевіряти не лише обмеження на розмір вхідних даних, елементів масиву, а й зв’язність графа, відсутність циклів у ньому чи будь-які інші гарантовані умови й обмеження. У задачі повинен бути один основний перевірник. Вказати основний перевірник для задачі потрібно на домашній вкладці (позначається хаткою). Ось декілька прикладів перевірників: перевірник до задачі A + B, перевірник до задачі Марічка і печиво, перевірник до задачі Коля, Вася і лабіринт.Звичайний достовірник
Останнім обов’язковим пунктом створення задач є достовірник. Достовірник (Checker) — програма яка перевіряє правильність відповіді. Якщо відповідь до задачі однозначна — то для цього існує
Token Checker
. Якщо ж потрібно перевірити відповідь у дійсних числах, використовуйтеDouble Checker
з потрібною для вас точністю. Якщо до задачі немає єдиної відповіді, то потрібно написати достовірник самостійно. Використовуйте нашу бібліотеку при написанні достовірників до задач. Використовуйте функцію «initChecker». Вона повертає масив з трьох елементів: читач тестових даних, читач виводу користувача та читач виводу авторського розв’язку. Якщо відповідь користувача є неправильною, то достовірник повинен вивести помилку та повернути 0. Відповідь вважається правильною якщо достовірник нічого не вивів і повернув 0. Достовірник приймає 4 параметри: шляхи до файлів з вхідними даними, виводом користувача, авторським виводом, кодом користувача. У задачі повинен бути один основний достовірник. Вказати основний достовірник для задачі можна на домашній вкладці(позначається хаткою). Ось декілька прикладів достовірників: Token Checker, Double Checker 1e-4, достовірник до задачі Марічка і смачні цукерки.Тести
На цьому етапі ваша задача вже має всі необхідні компоненти. Ви можете повернутися до домашньої вкладки (позначається хаткою), вибрати всі першоджерела до задачі та надіслати її. Якщо Ви все зробили правильно, то задача отримає статус «Успішно завершено».
Попри те, що задача збудувалася, в ній поки немає тестів. Тести — це набори вхідних даних, на яких будуть перевірятися розв’язки користувачів. Є три способи додати тест до задачі:
Створити ручний тест. Ручний тест — це тест, який задається вручну. Такі тести можна роботи прикладами, які відображатимуться в умові.
Написати генератор тестів (детальніше в наступному пункті).
Додати архівні тести. Щоб додати архівні тести, потрібно надіслати архів у форматі Zip, та вказати розширення вхідних та вихідних файлів. Всі файли зі вхідними та вихідними даними повинні мати відповідні розширення до тих, які Ви вказали. Файли з вхідними та вихідними даними, які стосуються одного тесту повинні мати однакову назву.
Генератор
Генератор — програма яка дозволяє автоматизувати процес генерації тестів. Використовуйте нашу бібліотеку при написанні генераторів до задач. Генератору можна передавати параметри, наприклад максимальний розмір тесту чи обмеження параметрів задачі. Першим параметром (з індексом 1) завжди передається номер тесту. Наступні параметри Ви повинні вказати самостійно. Останнім параметром ви можете додати міш. Це випадково згенерований рядок. Його потрібно додавати, щоб неможливо було відновити тести, маючи код генератора. Генератор псевдовипадкових чисел ініціалізовується від усіх параметрів. Генератор повинен виводити результат у стандартний потік виводу(
STDOUT
).Ось декілька прикладів генераторів: генератор до задачі A + B, генератор до задачі Марічка і печиво.
В однієї задачі може бути декілька генераторів, які генерують різні типи вхідних даних. Ось один приклад та інший приклад генератора до задачі Максим, Петро й Богдан. Перший генератор формує випадковий зв’язний граф, а другий граф зірку заданого розміру. Оскільки це 2 різні типи графів, то довелося використати більш ніж 1 генератор.
Надсилання задачі
Після написання всіх першоджерел і додавання тестів задачу потрібно надіслати. Щоб надіслати задачу натисніть на кнопку «Надіслати», що знаходиться справа від вкладок налаштування задачі. Після надсилання задачі відбудеться наступне:
Сформуються тести. Генератор (Generator) згенерує тести, і разом з ручними та архівними тестами, сформується набір тестів.
Перевірник (Validator) перевірить тести на коректність.
Розв’язок (Solution) запуститься на наборі тестів, і будуть сформовані авторські відповіді.
Якщо на будь-якому з цих етапів виникне помилка, то задача отримає статус Містить помилки, і у вкладці «Результат» буде вказано що саме пішло не так. У іншому випадку у задачі буде статус Успішно завершено. Якщо у задачі є статус Успішно завершено, то Ви зможете побачити тести у вкладці «Результат».
Інтерактивний достовірник
Інтерактивний достовірник — це достовірник для інтерактивних задач. Використовуйте функцію «initInteractiveChecker». Вона повертає масив з трьох елементів: читач тестових даних, потік вводу користувача (Вам потрібно писати вхідну інформацію в цей потік) та читач виводу користувача (зчитуйте відповіді користувача з нього).
Генератор та перевірник до інтерактивних задач повинні генерувати та перевіряти лише вхідні дані для достовірника, але не для розв’язків задачі. Розв’язки задачі взаємодіють лише з інтерактивним достовірником. Зауважте, інтерактивний достовірник відповідає не лише за перевірку правильності розв’язку, а й за надання користувачеві вхідної інформації. Ось приклад інтерактивного достовірника до задачі Інтерактивне число. Приклади перевірника та генератора до неї: перевірник до задачі та генератор до задачі.
Оцінювачі та вартість тестів
Якщо для задачі Ви хочете також враховувати частково правильні розв’язки, то ви можете нараховувати бали за них. Тоді користувач зможе набрати певну частину балів за задачу, якщо не придумав достатньо швидкий чи абсолютно правильний розв’язок. Найпростіший спосіб це зробити поставивши кожній групі тестів певну вартість. Бали за групу тестів користувач отримає лише якщо його розв’язок буде правильним для всіх тестів з групи.
Отримати певну кількість балів за задачу також можна за допомогою оцінювача. Перед отримуванням балів за розв’язок, його перевіряє достовірник. Оцінювач оцінює лише ті розв’язки, які пройшли перевірку достовірника. Оцінювач приймає 6 параметрів, що є шляхами до файлів:
Файл з вхідними даними.
Вивід користувача.
Вивід автора.
Тека з обробленими файлами коду (файли STDIN, STDOUT, STDERR, виконуваний файл користувача).
Тека для писання. Це тека для внутрішнього використання оцінювачем. Вона буде очищена між тестами.
Код користувача.
Оцінювач повинен вивести цілу невід’ємну кількість балів які користувач отримає за тест у стандартний потік виводу. Ось приклад оцінювача: оцінювач до задачі Зеник і сортування.
Логи виконання тестів
Щоб побачити результат розв’язку на одному конкретному тесті необхідно:
У вкладці «Першоджерела» для відповідного розв’язку натиснути на «Перегляд», що знаходиться в найправішій колонці «Дії».
Перейти на вкладку «Результат» і подивитися логи відповідного тесту.
Зауважте що дуже великі тести у цій вкладці є неповними, однак ви можете завантажити ZIP архів (у правому верхньому куті) з повними тестами.