Polygon Tutorial
- Для опытных пользователей
- Основные отличия от обычной подготовки задач в Polygon
- У меня готовы задачи, они не подходять по каким-то критериям, но я не хочу их изменять
- Основные принципы работы с Polygon
- Подготовка задачи (для начинающих пользователей)
- Подготовка контеста
Для опытных пользователей
Чтобы залить собственные задачи на informatics.msk.ru, вам нужно подготовить их в системе Polygon.
После того, как задачи готовы к заливке на сайт, необходимо объединить их в контест и выдать права на этот контест пользователю informatics.
После этого надо создать заявку в тикитнице.
В заявке необходимо указать номер контеста, из которого нужно заливать задачи.
Основные отличия от обычной подготовки задач в Polygon
Если вы уже готовили задачи в Polygon, то, скорее всего, вам будет неинтересно читать инструкцию по подготовке задачи, поэтому в этом разделе приведены основные отличия от обычной подготовки задачи:
- Должна собираться html версия русского условия. Условие обязательно должно быть на русском языке.
- Во вкладке Files в разделе Attachments надо загрузить valuer.cfg.
- Если вы не хотите выдавать WRITE права на задачу пользователю informatics, вам самим надо будет собрать Full Package последней ревизии задачи.
- В задаче должны быть проставлены теги. Например, если задача на бинарный поиск по ответу, в ней должен быть тег binary search. Теги надо добавлять в general info.
- Если задача содержит Input/Output for statements то желательно просто сделать if на тест из условия в авторском решении. Если это невозможно, то предупредить в заявке о такой задаче. Если вы забудете предупредить, то, возможно, человек, заливающий задачи, этого не заметит, и все будут видеть Output авторского решения.
- Чекер и интерактор в задаче должны быть написаны на любом языке кроме java (из-за проблем с ejudge).
- Семплы должны быть первыми тестами в задаче
- Контест с задачами должен содержать минимально возможное количество warning.
У меня готовы задачи, они не подходять по каким-то критериям, но я не хочу их изменять
К сожалению, их предется изменить, задачи не подходящие по критериям залиты не будут.
Если у вас есть задача с какой-то олимпиады и ее не хочется изменять, то можно создать ее копию и делать все исправления в этой копии.
Чтобы создать копию задачи нажмите кнопку Advanced в general info.
После этого введите название для копии задачи и нажмите Clone.
Будет создана полная копия задачи. Обратите внимание, manage access не будет скопирован. Вы будете единственным человеком с правами на копию задачи. После этого внесите все нужные изменения в копию задачи.
Основные принципы работы с Polygon
Если вы никогда раньше не использовали Polygon, то для начала нужно зарегистрироваться.
При первом входе в аккаунт, вы увидите набор из трех задач — примеров.
В любой момент можно открыть каждую из этих задач и использовать в качестве примера. Для этого кликните на Start напротив задачи, или Continue, если вы уже открывали задачу.
В основном, работа с Polygon напоминает работу с любой системой контроля версий . Вы берете вашу рабочую копию и начинаете вносить изменения.
После того, как все изменения внесены, нажмите кнопку Commit Changes, чтобы закоммитить ваши изменения.
Эта кнопка доступна только для задач, на которые у вас есть WRITE права. Если у вас только READ права, вы все еще можете изменять рабочую копию, но не сможете закоммитить изменения.
Если в задаче есть незакоммиченые изменения, то строка с ней выделяется красным цветом.
Чтобы отменить все изменения, внесенные в рабочую копию, нажмите Discard (осторожно, это действие отменить нельзя).
Чтобы посмотреть все доступные вам задачи, нужно нажать кнопку View Problems. Чтобы посмотреть на все доступные вам контесты, надо нажать View Contests.
Чтобы выйти из задачи, тоже можно нажать View Problems, если задача принадлежит какому-то контесту, то у вас еще будет кнопка Contest, позволяющая перейти к этому контесту.
Подготовка задачи (для начинающих пользователей)
Создание новой задачи
Нажмите New Problem, вам будет предложено выбрать рабочее название задачи.
После этого вас перекинет на главную страницу со всеми задачами и вы сможете выбрать свою задачу.
Интерфейс задачи
- Основной интерфейс задачи
- General info
- Statement
- Files
- Checker
- Interactor
- Validator
- Tests
- Stresses
- Solution files
- Invocations
- Issues
- Packages
- Manage access
- valuer.cfg
Основной интерфейс задачи
Визуализация основного интерфейса задачи. Сверху есть набор вкладок, позволяющий изменять конкретные элементы в задаче.
В меню справа коротко показаны основные параметры задачи (Все testset и количество тестов в них, какой в задаче checker, авторское решение, и.т.д.).
Чуть ниже этого меню показаны изменения в нашей рабочей копии и в нем же содержатся кнопки для коммита изменений.
General info
На этой странице содержится основная информация о задаче.
А именно:
- Название входных/выходных файлов. По умолчанию стандартный ввод/вывод. При заливке на informatics их менять нельзя
- Максимальное время работы программы и максимальный объем допустимой памяти на одном тесте. При заливке на informatics некоторые из этих параметров могут увеличится, так как сервера informatics медленнее серверов Polygon.
- Interactive - является ли задача интерактивной. При выборе этой опции вам дополнительно добавится меню для загрузки интерактора
- Are tests well-formed - полезная опция для правильного форматирования тестов. Отключать можно только в исключительных случаях, когда в задаче нужно нетривиально распарсить ввод.
- Are test points enabled - разбалловка для задачи. Эта опция не переносится при загрузке задач на сайт и ее необязательно включать. Вместо этого нужно написать valuer.cfg.
- Теги. В задаче должен быть хоть один тег. Например, если задача на бинарный поиск по ответу, в ней должен быть тег binary search.
Statement
Окно для подготовки условия задачи. Для начала нужно создать условие задачи, для этого следует нажать Create New, выбрать язык и затем нажать Create.
После этого перед вами появится вот такое окно.
Условие должно быть в формате Latex. Чтобы посмотреть как выглядит ваше условие, нужно кликнуть In HTML. Не рекомендуется использовать очень сложную верстку, т.к. html версия условия поддерживает не все.
Тестовые примеры из условия автоматически сгенерируются из помеченных тестов в задаче, их не нужно добавлять вручную.
Посмотреть примеры написания условий можно в демонстрационных задачах (например в example-almost-upper-bound).
В вашей задаче обязательно должна собираться русская версия условия в html.
Files
Раздел с файлами задачи. Вы можете в Source Files положить коды генераторов тестов, чекера, валидатора.
В раздел Attachments вы можете добавлять любые фалы. В этот раздел обязательно должен быть добавлен valuer.cfg.
Checker
Раздел с проверяющей программой. Всегда старайтесь использовать одну из стандартных проверяющих программ.
Если это невозможно, напишите чекер следуя этой инструкции
В ejudge есть проблемы с чекерами на java. Задачи с чекерами на этом языке залиты не будут. Чтобы залить задачу, перепишите чекер на другом языке.
Interactor
Если задача интерактивная, в задачу добавляется этот раздел.
При написани Интерактора можно руководствоваться этой инструкцией.
Даже при наличии интерактора в задачу нужно добавить чекер. В данном случае, чекер будет проверять вывод интерактора в tout.
Если вы все проверяете на стороне интерактора, просто добавьте чекер, который возвращает exit code 0 в любом случае.
Поскольку в ejudge есть проблемы с интеракторами на java, то задачи с интеракторами на этом языке залиты не будут, пока интерактор не будет переписан на другой язык.
Validator
Раздел с программой проверяющей корректность тестов. Валидатор можно написать по этой инструкции.
Валидатор - обязательный критерий для заливки задач. Исключения обговариваются отдельно.
Tests
Polygon предоставляет возможность работы с несколькими наборами тестов, обхединяя их в testset. Не смотря на это, ejudge скачивает только основной тестсет с названием Tests, поэтому возможность работы с несколькими тестсетами рассмотрена не будет
Так же важной особеностью Polygon является то, что нельзя руками указать ответ на тест, все ответы на тесты генерируются авторским решением.
Единственое, что можно указать, это то, какой будет сам тест (да, Polygon позволяет изменить содержимое теста для условия задачи, это бывает полезно для интерактивных задач) и ответ на него в условии задачи, но этой опцией не рекомендуется пользоваться в обычных задачах, т.к. она не заменяет реальный ответ на тест в файлах задачи, и при заливке на informatics можно забыть его подменить (informatics всегда генерирует условия из файлов с тестами и не умеет автоатический загружать Input/Output for statements).
Интерфейс работы с тестами выглядит вот так:
Ручные тесты и загрузка файлов с тестами
Чтобы добавить тест, надо нажать на Add Test. После этого вам откроется следующее меню:
Тут можно ввести входные данные для теста. Если вы хотите использовать тест в условии, нужно нажать соответствующую галочку.
Чтобы указать Input/Output for statements, надо нажать click here в появившемся тексте.
Галочка в самом низу означает, что Input/Output for statements надо проверять при помощи валидатора и чекера. Обычно эту опцию отключают только для интерактивных задач.
Также вы можете добавить тесты из архива или фалов, для этого справа сверху нажмите from the archive или from the files.
Если вы выбрали from the archive, то все файлы из выбраного вами архива будут добавленный в качестве тестов, поэтому надо не забыть удалить из него лишние файлы (обычно это файлы с ответами на тесты).
Если вы выбрали from the files, то вы можете загрузить сразу несколько файлов, все они будут добавлены в качестве тестов.
После того, как тесты добавленны, их можно редактировать, для этого перейдите на главную страницу с тестами и нажмите edit напротив теста. Это бывает полезно, если вы забыли указать что какой-то тест является тестом из условия.
Все тесты из условия должны быть первыми тестами в задаче.
Генерируемые тесты
Чтобы сделать генерируемый тест, вам сначала надо написать генератор теста по этой инструкции.
После этого вам надо добавить генератор в раздел files в Source Files.
Далее вам надо изменить скрипт для генерации тестов.
Более подробно как писать скрипт написано в меню справа.
Использовать генерируемые тесты более предподчительно, чем генерировать тесты локально и загружать файлы с ними.
Желательно не делать тесты из условия генерируемыми тестами.
Stresses
Тут вы можете запустить стресс решений, и, в случае успеха (или провала, если авторское решение упадет), добавить найденный тест в задачу.
Solution files
Раздел в который надо загружать решения. В этом разделе будет только одно решение помеченное как Main correct solution, оно используется для генерации ответов на тесты.
Для остальных решений можно поставить специальные теги. Эти теги должны быть корректны на всех тестах (например решение помеченное как Time limit exceeded не должно выдавать неправильных ответов), иначе валидация задачи не пройдет.
Если вердикт может быть произвольным, надо поставить тег Incorrect.
Invocations
В этом разделе вы можете запускать решения на различных тестах.
И смотреть результаты запуска.
Issues
Раздел в котором можно оставлять Issue.
Packages
Раздел в котором надо собирать пакет с задачей. Для заливки задачи на informatics у нее должен быть собран Full Package для последней ревизии с включенной верификацией.
Manage access
В этом разделе вы можете добавлять пользователей, которые могут смотреть или редактировать задачу. Чтобы задача была залита на сайт informatics, нужно добавить пользователя informatics.
valuer.cfg
Поскольку informatics использует ejudge, вам нужно написать valuer.cfg для оценивающие программы gvaluer. Как его писать можно прочитать тут.
После того, как вы его напишите, в разделе Files залить его в Attachments.
Наличие valuer.cfg является обязательным условием для заливки задачи. Даже если задача оценивается как 0 или 100 баллов, вам необходимо добавить valuer с одной группой содержащей все тесты.
Подготовка контеста
- Создание нового контеста
- Основной интерфейс контеста
- Как добавить существующую задачу в контест
- Как дать пользователю права на контест
- Warning в контесте
Создание нового контеста
После того, как вы создали задачи, их нужно объединить в контест.
Для этого нажмите New Contest и введите название контеста. Main language должен быть русским.
Остальные поля заполнять необязательно.
Основной интерфейс контеста
Чтобы зайти в контест, зайдите во вкладку View Contests и нажмите Enter напротив контеста.
После этого вы попадете на основную страницу контеста.
В меню справа есть набор операций над контестом
В самом верху есть кнопка Manage problem access, при помощи которой можно выдавать права одновременно на все задачи в контесте (а не отдельно в каждой задаче).
Далее есть секция с условиями, в ней можно смотреть условия всех задач одноврено. Условия можно собирать как в html, так и в pdf. Также можно выбрать, берутся ли условия из рабочих копий или из последних собранных package.
Дале есть меню для операций над задачами:
- New problem - создать новую задачу и добавить ее в контест
- Renumerate problems - Присвоить новые индексы задачам (обычно в качестве индексов используют заглавные буквы латинского алфавита). Задачи будут отсортированны в алфавитном порядке по индексам.
- Add problems to other contest - выбрать задачи из этого контеста и добавить их в другой контест
- Update working copies - обновить рабочую копию во всех задачах
- Build standard packages (+verify) - собрать во всех задачах Standard package без verify. Если нажать на +verify, то package будут собраны с verify.
- Build full packages (+verify) - собрать во всех задачах Full package без verify. Если нажать на +verify, то package будут собраны с verify.
Чтобы изменить какие-то свойства контеста (например название, или добавить еще один язык в контест), надо нажать на Properties/Files.
В самом низу можно добавлять разработчиков в контест.
Если в контесте уже есть задачи, то снизу будут показываться последние коммиты по задачам.
Как добавить существующую задачу в контест
Для этого нажмите на кнопку Add problems? справа сверху.
После этого вы увидете вот такое окно.
В нем выбирите нужные задачи и нажмите Add problems.
Как дать пользователю права на контест
Для этого справа снизу нажмите Manage developers list.
Перед вами откроется вот такое окно.
Вам нужно будет ввести список логинов, которым вы ходите дать права на контест и указать, какие права они получают на имеющиеся задачи в контесте.
Затем надо просто нажать Change developers list.
Обращаем внимание, что в этот момент вы выдаете права только на существующие в данный момент задачи. При добавлении новой задачи в контест - права на нее необходимо выдать вручную.
Проще всего выдать права на новую задачу, нажав справа сверху Manage problem access.
В этом меню вы можете выставить права на каждую задачу каждому из пользователей в контесте.
В этом меню также показываются все пользователи, которые имеют хоть какие-то права на задачи из контеста, при этом они не обязательно должны иметь права на сам контест.
Warning в контесте
В задачах есть столбец Warn.. В этом столбце показываются разные предупреждения, обычно сведетельствующие о том, что задача не до конца готова.
Есть пара ислючительных случаев, когда предупреждений избежать нельзя (например Input/Output for statements в интерактивных задачах), но желательно убирать все возможные предупреждения.
Чтобы увидеть список предупреждений в задаче, нажмите на цифру в графе Warn. и они появятся под задачами.