УДК 372.862
МЕХАНИЗМ И ТЕХНОЛОГИЯ НАСТРОЙКИ ОНЛАЙН-СЕРВИСА АВТОМАТИЗИРОВАННОЙ ПРОВЕРКИ ЗАДАНИЙ ПО ИНФОРМАТИКЕ
© 2023 И. А. Юрьев1, И. Н. Гостева2
1 магистрант 2 курса факультета физики, математики, информатики, кафедры компьютерных технологий и информатизации образования e-mail: van4elsing78@yandex.ru 2кандидат педагогических наук, доцент кафедры компьютерных технологий и информатизации образования e-mail: gosteva. irina @ mail. ru
Курский государственный университет
В статье содержится информация об особенностях добавления задач и управления ими в автоматизированных системах проведения соревнований по программированию.
Ключевые слова: олимпиадная информатика, автоматизированные системы проведения соревнований по программированию, подготовка к олимпиаде по информатике.
MECHANISM AND TECHNOLOGY OF SETTING UP AN ONLINE SERVICE FOR AUTOMATED VERIFICATION OF COMPUTER SCIENCE ASSIGNMENTS
© 2023 I. A.Yuriev1, I. N. Gosteva2
12nd year master's student of the Faculty of Physics, Mathematics, Computer Science,
Department of Computer Technology and Informatization of Education
e-mail: van4elsing78@yandex.ru 2Candidate of Pedagogical Sciences, Docent of the Department of Computer Technologies and Informatization of Education e-mail: gosteva. irina @ mail. ru
Kursk State University
The article contains information about the features of adding and managing tasks in automated systems of programming competitions.
Keywords: Olympiad informatics, automated systems of programming competitions, preparation for the Olympiad in computer science.
Среди многочисленных приемов работы, ориентированных на интеллектуальное развитие школьников, особое место занимают предметные олимпиады.
Слово «олимпиада» ассоциируется с сильными учащимися, отличниками. Подобный подход оправдан, если речь идет о районных, краевых, всероссийских и международных очных олимпиадах. На таких уровнях сама цель олимпиад - выявление одаренных и нестандартно мыслящих учащихся, определение сильнейших из них.
Ежегодно олимпиада по информатике проводится в несколько этапов. В 20222023 учебном году часть задач были выбраны по тематике знаменитой трилогии Астрид Линдгрен «Малыш и Карлсон», так как приближался юбилей выхода последней
части. Организаторы и составители задач всегда стараются соответствовать интересу учеников, не забывая о сложности заданий. Сами задачи имеют общий вид, где видны входные и выходные данные, условие, количество баллов, пример и примечание к задаче. Например, одна из задач для 7-8 классов имела название «Карлсон и автобусы» и выглядела следующим образом:
Задача 1. Карлсон и автобусы (100 баллов)
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Максимальное время работы на одном тесте: 1 секунда
Максимальный объем используемой памяти: 512 Кб
Как известно, Карлсон - очень любопытный персонаж. Однажды ему пришло в голову изучить, какие автобусы останавливаются около дома Малыша. Выяснилось:
1. У дома Малыша есть остановка с обеих сторон проезжей части дороги.
2. Один маршрут ходит в одну сторону и останавливается на остановке около дома Малыша, а другой - в другую и останавливается через дорогу от дома Малыша.
3. Автобусы по маршрутам всегда ходят точно по расписанию.
4. Каждый из них стоит на остановке ровно одну минуту.
5. Интервал между автобусами (время, в течение которого автобуса на остановке нет) составляет а минут в одну сторону и Ь минут в другую. То есть автобус в одну сторону приезжает и стоит одну минуту, затем в течение а минут остановка пустая, затем в течение одной минуты на ней стоит следующий автобус и т. д.
Пока Карлсон сидел на крыше, он насчитал п автобусов на остановке около дома Малыша и т автобусов на остановке через дорогу от дома. Все автобусы Карлсон наблюдал в течение всей минуты, то есть он не улетел и не прилетел с крыши посередине той минуты, когда автобус был на остановке.
От Вас требуется написать программу, которая определит минимальное и максимальное время, которое Карлсон мог провести на крыше, или выдаст сообщение, что он точно напутал в своих подсчётах.
Формат входного файла
Первая строка входных данных содержит число а - интервал между автобусами на остановке около дома Малыша. Вторая строка содержит число Ь - интервал между автобусами на остановке через дорогу. Третья строка содержит число п - количество автобусов на остановке около дома, которые увидел Карлсон. Четвёртая строка содержит число т - количество автобусов на остановке через дорогу, которые увидел Карлсон. Все числа целые, от 1 до 1000.
Формат выходного файла
Программа должна вывести два числа: минимальное и максимальное время в минутах, которое Карлсон мог сидеть на крыше и наблюдать, или одно число -1, если он точно ошибся.
Пример входного и выходного _ файлов
стандартный ввод стандартный вывод
1 5 7
3
3
2
1 -1
5
1
2
Примечание к примеру:
В первом примере на остановку около дома автобусы приходят через 1 минуту, на остановку через дорогу - через 3 минуты. Сидя на крыше 5, 6 или 7 минут, Карлсон мог насчитать 3 автобуса на остановке около дома и 2 на остановке через дорогу.
Такие олимпиады обычно проводятся с использованием различных сервисов, таких как системы тестирования на программирование, среды разработки и инструменты для проверки правильности кода. Целью этих соревнований является развитие и выявление качественных специалистов в области информационных технологий, которые в будущем могут создавать передовые технологии и использовать их в различных сферах. Яндекс.Контест - это платформа для проведения онлайн-тестирований. Основное назначение платформы - проведение соревнований по спортивному программированию.
Для организации олимпиады необходимо провести предварительную настройку соревнования, которая включает два основных этапа: добавление участников и добавление задач [5]. В данной статье рассматривается этап добавления задач.
Для каждой задачи необходимо создать набор тестов, включающий файлы с входными данными и эталонными ответами. Важно отметить, что это только один из видов задач, используемых на олимпиадах по информатике. В данной статье мы рассмотрим работу в Яндекс .Контекст на примере только таких задач.
Для начала выполнения этого этапа необходимо войти в сервис Яндекс.Контекст в роли администратора. После этого появится окно, представленное на рисунке 1. Далее необходимо выбрать пункт меню «Задачи» (рис. 1).
Рис. 1. Основное окно Яндекс.Контекст
После этого появится страница управления задачами (рис. 2), которая позволяет:
1. загружать задачу;
2. создавать новую задачу;
3. искать задачу по названию с помощью поисковой строки;
4. управлять уже созданными задачами, нажав на название необходимой
задачи.
Рис. 2. Окно управления задачами
Далее для наглядности рассмотрим добавление конкретной задачи «Карлсон и автобусы», условие которой было приведено в начале статьи и которая была включена в список задач муниципальной олимпиады 2022 года для 7-8 классов в Курской области. При нажатии на кнопку «Создать задачу» появится окно ввода названия задачи (рис. 3).
Рис. 3. Окно ввода названия задачи
После ввода в соответствующее поле названия задачи и нажатия на кнопку
«Создать» появится окно настройки задачи (рис. 4).
< Задачи Карлсон и автобусы
Й щ ©
Общее
Настройки
Общее Поле ответа Настройки файлов Ограничения на запуск Ограничения на компиляцию Дополнительные файлы и обработки Настройки чекера Доступ
Тесты и решения Условия
Комментарии к решению Файлы
Скачать архив
Короткое название задачи (?) Название @
Тип задачи ©
Наборы с этой задачей ©
Использовать альтернативный рендерер для условий и правильных ответов ©
ru Карлсон и автобусы
PROBLEM_WITH_CHECKER v-
Муниципальная олимпиада 2022 Курской области 7-8 класс Да Нет
Поле ответа
Рис. 4. Окно настройки задачи
В нижней части этой страницы находится раздел «Настройки файлов» и «Ограничение на запуск». Пролистав страницу до этого раздела, нужно установить значения ограничений задачи в соответствии с её условием (рис. 5).
Рис. 5. Окно настройки файлов и ограничений на запуск
Далее необходимо загрузить заранее подготовленный комплект тестов. Заметим, что тесты генерируются по эталонному решению, представленному на одном из языков программирования. Комплект должен состоять из тестов для предварительной проверки и тестов для основной проверки. Каждый тест представляет собой два файла - входной и соответствующий ему эталонный ответ. Предварительные тесты (обычно от одного до двух) выводятся вместе с условием задачи. Их имена должны отличаться от имен основных тестов, но бывает, что эталонные тесты - это первый или второй тест в общем списке тестов.
Стоит отметить, что если создание тестов происходило в операционной системе Windows в среде, например, языка программирования Pascal, то перед загрузкой файлы тестов необходимо обработать утилитой dos2unix, которая преобразовывает текстовые файлы DOS в текстовые файлы Unix, и наоборот. Напомним, что форматы текстовых файлов операционной системы DOS и операционной системы UNIX имеют отличие. Признаком конца DOS-строки является пара символов «возврат каретки»(СЯ) и «перевод строки» (LF), а в UNIX признак конца строки только один символ - это перевод строки LF [1]. Это приводит к проблемам при тестировании программ, написанных, например, на языках Python, С++ и Java. Такие программы при выполнении потокового ввода считают эти 2 символа разделителями между значениями, что приводит к вводу пустого значения, если считывалась строка, или к ошибке периода исполнения «неверный формат входных данных», если считывалось число. Тестирование предлагаемых участниками решений на указанных языках программирования на необработанных тестовых файлах DOS приводит к ошибкам периода исполнения, и участнику назначается 0 баллов. Утилита dos2unix.exe выполняет преобразование DOS-формата текстовых файлов в ничем не отличающийся по содержанию текстовый файл формата UNIX [1].
Изначально все файлы одной задачи поступают в одной папке, чередуясь форматами. Первый файл идет без расширения, второй с расширением «.а» (например 01,01.а,02,02.а и т.д.). Каждый файл без расширения необходимо перевести в формат .in, а каждый файл с расширением «^»необходимо перевести в формат .out. Для удобства выполнения необходимо создать две папки с названием «Входные» и «Выходные». В первую папку необходимо переместить все файлы без расширения, а во вторую все файлы с расширением «.a». Чтобы не переименовывать каждый файл вручную, следует открыть командную строку в этой папке и использовать команду «ren *. *.in» для файлов без формата, а в папке с расширением «.а» через командную строку
необходимо использовать команду «ren *a. *.out». В итоге получаем две папки, где в первой все файлы с форматом «.in», а во второй с форматом «.out».
Один из вариантов выполнения обработки с помощью утилиты dos2unix.exe -это поместить утилиту в папку «Входные», так как только именно входные файлы необходимо обработать. Затем необходимо запустить утилиту следующей командой в командной строке «dos2unix -k *.in». Но итоговое расширение входных файлов должно быть пустым. Поэтому после обработки утилитой мы снова через командную строку выполняем обратное действие командой «ren *.in *.». После этого действия файлы готовы к загрузке.
Подготовленный таким образом комплект тестов можно загружать в систему проверки задачи. Чтобы загрузить все полученные файлы, нужно в боковом меню выбрать «Файлы» (рис. 6), найти папку «tests», нажать на неё и нажать на кнопку «Выбрать файл», чтобы выбрать окно загрузки файлов (рис. 7).
< Задачи
Настройки
Общее Поле ответа Настройки файлов Ограничения на запуск Ограничения на компиляцию Дополнительнь е файгы и обработки Настройки чекера Доступ
Тесты и решения Условия
Комментарии к решению Файлы
Скачать архив
Рис. 6. Боковое меню настроек
Рис. 7. Окно загрузки файлов
После появления окна загрузки файлов необходимо выбрать нужный файл и последовательно загрузить все сгенерированные файлы.
Для проверки того, что все файлы загружены, нужно нажать на папку «tests», и если всё верновыполнено, то в папке будут отображены все загруженные файлы (рис. 8). Имена файлов с исходными данными должны отличаться уникальным номером, указанным в конце имени. Расширение у данных файлов не указывается. Файлы с эталонными ответами должны называться аналогично соответствующему файлу исходных данных и иметь расширение .out.
Рис. 8. Содержимое папки «tests»
Для того чтобы указать системе, какие тесты являются эталонными, а какие предварительными, нужно в боковом меню настроек найти подзаголовок «Тесты и решения» (рис. 9) и нажать кнопку «Добавить сэмплы» внизу страницы для добавления предварительных тестов (рис. 10).
Комментарии к решению
Рис. 9. Боковое меню настроек
НАБОРЫ ТЕСТОВ
Добавить набор тестов - All tests
Рис. 10. Окно набора тестов
После данного действия появится папка «samples». Теперь нужно задать набор и порядок входных файлов, а также шаблон правильного ответа. В данном случае входные файлы должны иметь имена 01 и 02 без расширения, а выходные файлы, соответственно, такие же имена и расширение «.out». Необходимо поменять значение в пункте «Шаблон файла правильного ответа» на «*.out». После загрузки всех этих файлов в папку tests её примерный вид должен соответствовать рисунку 11. Для проверки того, что все верно загружено, нужно нажать на кнопку «Обновить тесты» (номер 3 на рисунке 11). После этого появляется таблица с названиями файлов и корректностью их введения.
НАБОРЫ ТЕСТОВ
Добавить набор тестов samples
Шаблон входного файла
Шаблон файла правильного ответа
Обновить тесты
Файл теста
1 ^ tests/01
2 tests/02
V All tests
Рис. 11. Добавление предварительных тестов
Теперь необходимо добавить основные тесты, задать набор и порядок входных файлов, а также шаблон названия файлов правильного ответа. Для этого нужно раскрыть папку «Alltests». Действия аналогичны работе с предварительными тестами, но у файлов должно быть другое имя. Нужно ввести название первого файла и после него указать «-», давая понять системе, что таких тестов будет столько, сколько файлов с таким же названием, но c разными порядковыми номерами, добавлено в папку «tests». После добавления основных тестов, по аналогии с предварительными тестами, нужно проверить правильность выполнения действий (рис. 12).
Добавить сэмплы
X
tests/{01-02}
ли _в
JH
Файл ответа
tests/01 .out tests/02.out
X
Рис. 12. Добавление основных тестов
Следующим пунктом является добавление условия задачи. Для этогонужно найти и нажать на подзаголовок «Условия» в боковом меню настроек (рис. 13). Далее необходимо нажать на кнопку «Добавить условие» (рис. 14).
Настройки Доступ
Тесты и решения
Условия «
Комментарии к решению Файлы
Скачать архив
Рис. 13. Боковое меню настроек
Условия
Тип условия
Магкс1оууп + КаТеХ ^ еп
Добавить условие
Русский (тагкскмп)
И X
Рис. 14. Окно изменения условия задачи
После выполнения данного действия появится окно редактирования условия задачи (рис. 15), где нужно прописать само условие задачи, входной формат и
выходной формат в соответствии с условиями заданной задачи. Также в некоторых задачах присутствуют примечания.
Рис. 15. Окно редактирования условия задачи
В конце страницы редактирования условия задачи необходимо нажать на кнопку «Сохранить». Также можно нажать на кнопку «Предпросмотр», чтобы убедиться, что всё данные введены правильно и предварительные тесты отображаются (рис. 16).
Рис. 16. Окно выбора предпросмотра задачи
Теперь, когда задача добавлена и настроена, её необходимо добавить в набор задач. Для этого в верхней части страницы нужно выбрать из главного меню пункт «Наборы задач» (рис. 17).
Рис. 17. Окно возврата к выбору наборов задач
После этого появится окно с выбором наборов задач. Выбираем то, в которое нужно добавить задачу, и нажимаем на название набора; если такого набора нет, то его необходимо создать, нажав на кнопку «Создать новый набор» (рис. 18).
Рис. 18. Окно выбора набора задач Теперь нужно найти и нажать на подзаголовок «Задачи» (рис. 19).
Рис. 19. Окно набора задач
Выводится окно набора задача. Нужно нажать кнопку «+», так как наша задача уже создана (рис. 20).
Рис. 20. Окно добавления задачи
Появляется окно поиска задача. Нужно ввести название вашей задачи или выбрать из списка, щёлкнуть по нему в появившемся внизу перечне задач и нажать «Добавить» (рис. 21).
Добавить задачу
X
Найти Импортировать из набора
Введите названио задачи
ID Название задачи Дата создания Автор i
146608...
146608... Автомобильная дорога Ма... 22.11.2022 Ирина Кос...
146608... Лечение Карлсона 22.11.2022 Ирина Кос...
146608... Пролетая над крышами Ст... 22.11.2022 Ирина Кос... -
Выбранные задачи
Карлсон и автобусы
22.11.2022
Ирина Кост...
Добавить
Рис. 21. Окно поиска задачи
Далее необходимо настроить количество баллов за задачу. Для этого нужно выбрать наше соревнование. Теперь нужно найти подзаголовок «Настройки монитора IOI». Теперь можно настроить количество баллов за задачу. Пусть за полное выполнение задачи ставится 100 баллов. Так как у нас 10 тестов для этой задачи, то за один тест нужно назначить 10 баллов. Указываем это значение в соответствующем столбце напротив задачи (рис. 22), который позволяет задавать баллы за каждый тест.
Рис. 22. Настройка типа монитора
Компиляторы © Очистить
null
SQLite 3.31.1 ф
basic
У Free Basic 1.04
с
У C.I4U 011 4 0 vie 11 x32 4.Э У Clang o11 3.0 GNU GCC7.3C11 GNU GCC12.2C17 Ф У GNU O4.0 ^CNU СХ32 4.Э
C#
Г C#(MS .NET 5.0 + AGP) C# (MS .NET S.O + ASP) I v'Mono С# 5.2.0
С++
Clang 15.0.7 C++20 Ф У Clang cxx11 3.8 ■■/GNU ci i 4.0 '/cNUd i 11 X32 4.0 У GNU C++17 7.3 GNUC++17 7.3{-00) GNU GCC 12.2 C++20 Ф □ GCC 5.4.0 С1114
d
v^dmd
У GDC 4.0
dart
Dart 2.19.2 Ф
go
У Golang 1.20.1 Ф
haskell
У Haskell 7.10.2
java
Oracle Java 3 Oracle Java 0 (48ML) Java 17 (Temurln JDK) Ф Java 19 (Temurln JDK) * i J OpenJDK Java 11
js
Cl Mocha (Node.js 12) ■/Node.js 16.17.0 Node.js 18.7.0 •> nodejs_jest I 1 Node.js 14.15.5
kotlin
•/ Kotlin 1.5.32 (JRE 11) » Kotlin 1.8.0 (JRE 11) *
kumir
kumir 2.1,0-rc9
lua
Lua 5.4
make
(Make) Clang 15.0.7 C++20 * f '■ (Make) C# (MS .Net Core 5.0) (Make) C# (MS .Net Core 6.0) (make) GNU GCC 12.2 C17 * (make) GNU GCC 12.2 C++20 & (make) GCC C++17 (make) Idao2022 (make) Idao2022 final (make) ipython3 (make) ipython3v2 (make) Java 17 (Temurin JDK) (make) js-blltz (make) Lyceum Python Test Make make?
■/ (make) pylhon2.7-r]urripy ■/ (make) python3.5+numpy (make) Node.js 16.17.0 «> (make) Node.js 18.7.0 (make) postgres (make) python-handbook •/ (make) python-lyceum ■/ (make) Python 3.7.3 i modules
(make) Pylhon 3.11.2 #> I I (make) pythondockermake (make) Swift 5.7.3 (make) tex (make) tmp_py
ml
■/ ocaml 4.02.3
pascal
■S Delphi (FPC 3.2.0) ■/ Free Pascal 3.2.0 «> ■/ PascalABC.NET 3.8.3
perl
■/ Perl 5.14
php
■■/PHP 5.3.10 P PI IP 7.3.5 PHP 8.1 »
python
■/ Python 3.9 (PyPy7 3.11) » P Python 2.7 y Python 3.7.3 y Python 3.11.2 «•
r
2.14.1 R 3.6.3 + Modules
ruby
'/Ruby 1.0.3 y Ruby 2.2.3
rust
y Rust 1.2 Rust 1.68.0
scala
y Scala 2.13.4 #■
shell
^GNU bash 4.2.24
special
Python 3.8 (Handbook DS) OpenJDK 17 + json ■/pythonG.61 numpy i pandas (make) yandexdataschool tSk (sjje^aj l Mario^Cft y (make) python3-mi y Python 3.7 3 ML (make) r-ml screenshots-checker Python 3.7 + network + requests GNU c++ 11 + net + curl +jsom Golang 1.14.4 + network ér Java 8 + network + json-slmple mr gi 117 7.3 controlled (make) ysda-mi
swift
Swift 5.7.3
unknown
gcc7.3-th read
Рис. 23. Окно настройки компиляторов
Последнее, что необходимо настроить непосредственно в самом разделе соревнования, - это компиляторы. Чаще всего список необходимых компиляторов дают заранее, но спустя какое-то время версии некоторых устаревают, поэтому необходимо за этим следить. Актуальный список компиляторов на 2022 год представлен на рисунке 23. Каждый необходимый компилятор необходимо отметить галочкой.
Когда всё настроено, осталось проверить работу с задачей. Для этого снова нужно перейти в соревнование и нажать «Монитор» (рис. 24).
Рис. 24. Переход к проверке соревнования
После этого нажать ссылку «Задачи» (рис. 25), выбрать язык программирования, написать решение и отправить его на проверку. Если будут пройдены все тесты (и предварительные, и основные), то вердикт будет «ОК» и будет указано 100 баллов за задачу (рис. 26).
Муниципальная олимпиада 2022 Курской области 7-8 класс
Положение участников Задачи Посылки Сообщения Участники Ответы
Рис. 25. Основное окно соревнования
Рис. 26. Окно проверки решения
Если же этого не произойдет, то нужно проверить, какой вердикт выдала система. Возможно, отправленное на проверку решение неправильное или проблема в настройке: неправильно настроен чекер, стоят не те ограничения на память и время или же загружены неверные тесты.
Библиографический список
1. CIT Forum IT-портал [Сайт]. - URL: http://citforum.ru/operating systems/manpages/UNIX2DOS.1.shtml (дата обращения: 01.05.2023).
2. Костенко, И. Е. Отбор задач муниципального этапа Всероссийской олимпиады школьников по информатике на основе компетентностного подхода на примере Курской области / И. Е. Костенко, И. Н. Гостева // Ученые записки. Электронный научный журнал Курского государственного университета. - 2018. -№ 4 (48). - С. 221-232.
3. Костенко И. Е., Костенко И. В. К вопросу о применении автоматизированных систем для проведения олимпиад по информатике и программированию / И. Е. Костенко, И. В. Костенко // Актуальные исследования в области математики, информатики, физики и методики их изучения в современном образовательном пространстве. Вып. 3: Результаты исследований в области методики изучения математики, информатики и физики при реализации программ основного общего и среднего общего образования, среднего профессионального образования. -Курск, 2018. - С. 37-42.
4. Яндекс.Контест [Сайт]. - URL: https://contest.yandex.ru/ (дата обращения: 01.05.2023).
5. Гостева, И. Н. Особенности выполнения этапа добавления задач средствами сервиса онлайн-проверки заданий по информатике / И. Н. Гостева, А. Ю. Мирошникова // Актуальные проблемы теории и практики обучения математике, информатике и физике в современном образовательном пространстве. - Курск, 2018. - С. 116-124.