Как говорится "Мы строили, строили и, наконец, построили". Или во всяком случае близки к этому.
19-го января 2012 года в 12:00 мы открываем подпроект "Тренировки" (по-английски мы назвали его "Gym", т.е. спортзал). Если коротко, то его цель предоставить сервис для того, чтобы на Codeforces вы могли не только участвовать в соревнованиях и обсуждать их, но и удобно тренироваться и тренировать.
В самом деле, при всем разнообразии online judges в мире, толкового сервиса для проведения тренировок не существует. Что хочется от такого сервиса:
- Наличие базы виртуальных контестов, составленных преимущественно из прошедших официальных соревнований.
- Возможность интегрировать результаты прошедших соревнований в виртуальные контесты, чтобы была возможность тренироваться "против" официальных участников.
- Возможность в любое время дня и ночи поучаствовать в тренировке, не боясь, что что-то сломается и сервер ляжет. Короче, надежность.
- Возможность как писать виртуальные контесты, так и дорешивать задачи.
- Возможность участвовать как индивидуально, так и в составе команды.
- Возможность менять состав при сохранении команды.
- Возможность просмотра разнообразных статистик и истории участий, возможность составления и публикации отчетов по выбранным участникам/контестам.
- Возможность тренеру самостоятельно добавить виртуальный контест, если такого еще нет. Процесс должен быть простым, надежным и максимально автоматизированным. Возможность запарсить таблицу результатов прошедших соревнований и добавить попытки официальных участников в виртуальный контест.
- Возможность смотреть решения других участников/тесты, если сам решил эту задачу.
- Возможность найти тренировку по вкусу, т.е. подбор по параметрам.
Проект Codeforces::Тренировки ставит перед собой цель выполнить все эти требования. Уже сейчас почти все из перечисленного доступно, а что таковым не является, то будет.
Поехали! Все картинки кликабельны.
Для участников
Перейдите в раздел "Тренировки" и выберите контест по вкусу. Обратите внимание на звездочки, они показывают сложность тренировки. Заказывайте виртуально контест (как это можно сделать с обычными раундами Codeforces) и приступайте к решению! Вам будут противостоять как другие виртуальные участники, так и участники-призраки : Это те, кто принимал участие когда-то давно в этом контесте, а в систему Codeforces попал в результате анализа таблицы финальных результатов прошедшего контеста.
Пожалуйста, если вы видели эти задачи или не собираетесь серьезно и самостоятельно решать тренировку, то не решайте ее. Единственный контест, на котором можно потестировать систему - это "2010 Codeforces Beta Round #1 (тренировка)", но и там тренеры тоже будут вычищать неадекватные участия.
Участвуя в тренировке, вы гарантируете, что решаете задачи без посторонней помощи и не посылаете чужие решения. Тренеры будут наделены полномочиями перемещать ваше выступление из типа "виртуальное участие" в тип "дорешивание", если им покажется, что вы нарушили эти простые правила. Если выяснится, что у нас в сообществе присутствует большое количество таких неадекватов, то мы будем вынуждены ограничить доступ в раздел "Тренировки" на основании рейтинга, приглашений или как-то еще. Надеюсь, что до этого не дойдет.
Для тренеров
Мы выделили отдельную роль - тренер. Тренером может стать любой красный участник, который готов прикладывать усилия к наполнению и поддержанию раздела "Тренировки". Обязательно прочтите правила и обязательства. Не становитесь тренером, если вы не согласны следовать им. В любой момент времени можно включать/выключать тренерский режим.
Мы понимаем, что наличие красного цвета - это очень жестко. Однако пока мы хотим попробовать, как пойдут дела именно при таком цензе. Дело в том, что система пока сыровата с одной стороны, с другой стороны очень не хочется устраивать там свалку. Давайте попробуем пожить с таким ограничением, а как быть дальше война покажет. Несколько дополнительных тренерских аккаунтов мы раздадим дополнительно в индивидуальном порядке.
Перейдем к самому вкусному - самостоятельному созданию тренировок. Для того, чтобы подготовить тренировку вам нужен архив прошедшего контеста:
- полные тесты (если используются генераторы, то тесты необходимо предварительно сгенерировать), включая файлы с ответами на каждый тест;
- авторские решения;
- чекеры;
- таблица финальных результатов в виде традиционного ACM-ICPC монитора в формате HTML (достаточно ссылки, еще можно использовать .dat-файл из TestSys).
Авторские решения не обязательны, но очень желательны. Чекеры нужны только, если ответ неоднозначен, должны быть совместимы с testlib в плане аргументов командной строки (checker-file input output answer) и возвращаемых кодов (OK - 0, WA - 1 и 2, FAIL - любое другое значение). Финальные результаты тоже не обязательны, но с ними будет значительно лучше! Да, у нас есть супер-интеллектуальный парсер, который умеет превращать в лог участия почти любой HTML ACM-ICPC монитор.
Форма "Новая тренировка"
Итак, нажмите "Создать новую тренировку". Если у контеста нет русского или английского названия, то просто не вводите его. Время начала можно опустить, но если его ввести, то можно сделать тренировку не для виртуального участия, а полноценный контест (который потом будет доступен виртуально). Уровень доступа оставляйте "приватный" пока контест не будет полностью готов. После этого его можно будет опубликовать.
Важно. Правила именования контестов такие. Сначала идет год официального проведения контеста или лучше сезон (без пробелов по обе стороны дефиса), затем название чемпионата (если есть), затем достаточно подробное название контеста, в конце в скобках может идти аббревиатура, включающая год с двумя знаками. Слова "по программированию", "по информатике" вставлять в название не надо. Например:
- 2008-2009 Всероссийская командная олимпиада школьников (ВКОШП 08)
- 2001-2002 ACM-ICPC Northeastern European Regional Contest (NEERC 01)
- 2008-2009 Winter Petrozavodsk Training Camp, Saratov SU Contest
- 2010-2011 ЛКШ, августовская смена, подборка задач на ДП
Обязательно заполняйте поля "Сезон", "Тип соревнования", "Страна", "Город". Страну или город лучше указывать по месту рождения или первого проведения оригинального контеста. В дополнительных настройках заполните описание, оно будет доступно участникам для просмотра до начала решения задач. Там можно указать источники задач, если задачи тренировки собраны из разных мест.
Codeforces Contest Wizard
Вкладка Contest
Итак, вы заполнили форму "Новая тренировка", нажали создать и оказались внутри интерфейса контеста. Следующий этап - его надо наполнить задачами и добавить участников-призраков и их попытки из финальных результатов прошедшего контеста. Внимательно прочтите синий бокс справа и откройте Codeforces Contest Wizard. Первый раз он будет открываться очень неспешно, но многое покешируется.
Внимательно прочтите все то, что написано на его первом табе. Там немного текста, и он будет полезен. Прочли? Тогда жмем "Next".
На табе "Contest" можно подправить длительность тренировки и выбрать файл с результатами, который будет обработан системой. Выберите файл (HTML-документ или протокол TestSys в формате dat) или ссылку на него, потом нажмите "Parse". Если все прошло хорошо, то автоматически должны заполниться боксы "Problems" и "Teams". Если этого не произошло, то формат не поддерживается. В таком случае сообщите нам об этом и добавьте задачи по одной, используя "Problems:Add". Если у задачи нет английского или русского названия, оставляйте их пустыми.
Далее нажимайте "Next", приложение добавит несколько табов - по одному на задачу.
Вкладки c задачами
На каждой из этих вкладок убедитесь, что вы ввели настоящее название задачи в Problem name. Оставляйте пустым название, если для этого языка у задачи нет названия. Дальше нажмите большую кнопку сверху "Select problem files and analyze problem". В диалоге выберите все те файлы, которые имеют отношение к задаче: тесты, чекер, решения. Можно выбрать чуток лишнего, ничего страшного. Обычно можно просто выделить весь каталог с задачей (если она в отдельном каталоге). Жмем OK.
Дальше начинается магия. Используя модифицированный код из http://codeforces.net/blog/entry/1637, приложение определяет, какие из файлов являются тестами, решениями, определяет чекер. Далее первый тест, решения и чекер (если есть) отправляются на анализ в Codeforces. Там осуществляется проверка принятых данных.
- Путем перебора компиляторов, учитывая расширение, определяется компилятор для каждого исходника. Здесь Free Pascal приоритетнее Delphi, а GNU g++ приоритетнее Microsoft Visual Studio C++. Если не получается скомпилировать исходник, то для него автоматически определятся необходимые ресурсы и, если надо, происходит модификация кода. Например, старые решение на C++ могут не компилироваться из-за неправильных include-ов, тогда include-ы будут добавлены автоматически.
- Магия продолжается. Для каждого решения автоматически определяется файл для ввода-вывода. Поддерживаются stdin/stdout, input.txt/output.txt, *.in/*.out и их комбинации. Для всех решений имена файлов ввода-вывода должны совпадать.
- Затем происходит тестирование каждого решения на первом тесте, от чекера ожидается код возврата 0. Используется сравнение по словам с игнорированием пробелов/переводов строк, если чекер не задан.
- Если все нормально, то чекер запускается на самом тесте и ответе на него как на выводе решения. Конечно, ожидается OK (т.е. код возврата 0).
- Последний штрих. Надо проверить, что чекер в самом деле умеет выводить что-то, кроме OK. Осуществляется его запуск на первом тесте и случайной строке в качестве вывода решения. В данном случае ожидается вердикт WA (т.е. код возврата 1 или 2).
- Итак, все пункты выполнены. Можно верить, что заданные файлы действительно похожи на решения, соответствуют тестам, а чекер похож на чекер. Обработанные данные (возможно, измененные исходные тексты + ресурсы типа testlib.h) возвращаются обратно в Codeforces Contest Wizard.
Процесс анализа содержимого задачи либо заканчивается с ошибкой, тогда надо что-то исправить и нажать "Reanalyze problem", либо можно переходить дальше. В процессе исправления можно редактировать результаты автоопределения типов файлов, добавлять-удалять файлы и прочее. Иногда в архив приложены заведомо неправильные решения, которые не проходят даже первый тест : Проще всего такие просто исключить из решений вручную.
Вкладка "Attachments"
Здесь все попроще. Надо добавить файлы с условиями и дополнительные материалы. Рекомендуется добавлять условия в виде одного файла с текстами всех задач (например, PDF или DOC). Если условия разложены по нескольким файлам, то я обычно составляю новый DOC-файл с полным проблемсетом. Старайтесь всегда ставить нумерацию страниц в условиях, добавляйте верхний колонтитул с названием контеста.
Вы можете выбрать один или несколько файлов в качестве условий. В первом случае он будет просто добавлен как есть, во втором случае файлы будут автоматически упакованы в ZIP-архив. Обязательно указывайте язык.
В раздел "Resources" добавляйте различные файлы, которые имеют отношение к контесту и могут быть полезны. Например, это могут быть разборы, какие-то слайды, визуализаторы тестов, исходники условий и проч.
Наконец, вкладка "Package"
Дело подходит к концу, нажимаем кнопку "Package". Система атоматически валидирует все задачи (см. пункт "Вкладки c задачами") и, если все нормально, предлагает сохранить пакет контеста. Удобнее всего - это залить его в автоматическом режиме прямиком на Codeforces. В этом случае система откроет FTP-соединение и скопирует файл contest.zip в корень папки контеста. Там уже этот файл будет автоматически (да-да, снова магия) разархивирован.
Если хотите, вы можете сохранить файл локально (укажите имя с расширение .zip) и посмотреть что там и как. Позже это файл под названием contest.zip можно будет залить по FTP в Codeforces, но уже в ручном режиме.
Конечно, проще залить файл в Codeforces автоматически. И насладиться такой приятной надписью.
Возвращаемся на Codeforces
В интерфейсе контеста есть важная ссылка "Обновить соревнование". Дело в том, что все изменения которые вы можете делать и куда заливает данные Codeforces Contest Wizard - это песочница. Чтобы обновить состояние контеста по текущему состоянию песочницы, надо нажать "Обновить соревнование". Для больших контестов это не очень быстрое дело, так как Codeforces опять валидирует все и вся, чтобы минимизировать возможность ошибки. Кроме того, в контест добавляются команды-призраки : После нескольких десятков секунд ожидания вам сообщат, что соревнование было обновлено. Возможно, появится сообщение об ошибке - внимательно его прочтите, и попробуйте разобраться в чем дело. Вероятно, что-то не так с файлами контеста.
В любой момент вы можете зайти по FTP (используя хэндл-пароль от Codeforces) и обновить какие-то файлы вручную. Обратите внимание, что для всех дескрипторов используется кодировка UTF-8, так что сохраняйте данные только в ней. Если что-то правите вручную, будьте внимательны и осторожны. После обновления состояния контеста вы увидите, что список задач обновился, а результаты пополнились такими веселыми призраками.
Мы в минуте от окончания подготовки. Осталось послать все авторские решения в систему, настроить ограничения по времени / памяти. Вы думаете это ужасно утомительно посылать авторские решения? Если в контест 10 задач, по 3-6 авторских на задачу, то надо отослать 30-60 файлов. Нет! Это совсем просто! Идем в раздел "Администрирование", нажимаем "Послать все авторские решения" и наслаждаемся результатом в разделе "Мои посылки".
Осталась деталь - установить ограничения. Либо воспользуйтесь формой редактирования задачи, либо установите ограничения на время непосредственно со страницы "Мои попытки", используя время работы какого-нибудь авторского решения. В таком случае ограничение по времени ставится по формуле RoundUp(3*T), где T - это время работы решения, а RoundUp - функция округления вверх до целого количества секунд. Мы считаем, что это неплохая эвристика для установки ограничения времени. Зачастую лучше даже поставить большее значение, а вот меньше ставить крайне не рекомендуется.
На этом подготовка контеста заканчивается, его уровень доступа можно сделать "защищенным" и показать другим тренерам. Если все нормально, то можно открывать и делать публичным. Чтобы проинформировать общественность о новой тренировке, можно написать пост одноименный подготовленному контесту.
Заключение
В конце хочется добавить, что пока это даже не бета, но мы приложим усилия, чтобы быстренько сделать сервис по-настоящему удобным и полезным. Нами проделана большая работа по привлечению магии на Codeforces, чтобы сделать процесс подготовки тренировки простым и надежным. Надеюсь, вы это оцените. Пожалуйста, не пишите сюда в комментарии конкретные баги или feature requests. У нас совсем скоро будет специальный пост для публикации в нем багов и пожеланий о системе, пишите туда. Здесь же, самое место устроить общее обсуждение системы.
P.S. Чуть позже я разбавлю текст скриншотами, будет веселее.
Удачных тренировок, MikeMirzayanov
<= ну-ну ;)
А я как раз недавно думал "интересно, а будет ли парсер с того давнего марафона".
Звучит потрясающе. Думаю, будет тоже замечательно.
Возникло несколько вопросв:
А всё это дело будет интегрировано с polygon'ом?
Ещё такой вопрос: можно ли будет делать тренировки для фиксированного набора участников, или любой созданный контест обязательно становится публичным?
Тренировки могут создаваться только тренерами, да?
Это нереально круто.
Хотелось бы узнать относительно старых Петрозаводсков, права на контесты авторам принадлежат?
Если да, то вопрос к авторам, планирует ли кто-то добавлять в открытый доступ?
Спасибо.
Некоторое количество старых Петрозаводских сборов можно порешать на http://acm.petrsu.ru (как — там написано в разделе "Помощь"). Там пока не очень много, но будет постепенно пополняться (с разрешения авторов, конечно).
положа руку на сердце, я ставлю под сомнение, что данное программное обеспечение будет достаточно эффективным
snarknews неоднократно говорил о низком качестве петрозаводских контестов, что уж говорить о контестах из менее "надёжных" источников?
в общем, я надеюсь, что всё будет круто, но, как говорится, вскрытие покажет
Или пока что надежда на то, что будет участвовать небольшое количество участников одновременно?
Решил, простите, тупой)
Добрый вечер. Сразу прошу прощения за предложение, которое уже возможно реализовано, но возможности посмотреть на новую фитчу Codeforces нету (Сессия => нету свободного времени, а регистрироваться на теренировку, чтобы потом ее не решать, не хочется).
К делу. Хотелось бы галочку, при нажатии которой в твоем мониторе отображались бы только участники с оригинального (залитого с архивом) монитора.
HTTP Status 404 - /taskbook/
type Status report
message /taskbook/
description The requested resource (/taskbook/) is not available.
что в таком случае делать?
I am finding The gym is just like the other "virtual contest".Its just seeing the problems and answering them.How can I know the solution of a particular problem and when does the coach come to help me??
Статья на e-maxx - и в точности на неё задачу.
У саратовских такой сайт есть, так что не думаю, что они будут делать какие-либо телодвижения в эту сторону:(
I downloaded the "wizard.jnlp", but could not run it. It says, "Fatal: Read Error: Could not read or parse the JNLP file". Detail: net.sourceforge.jnlp.LaunchException: Fatal: Read Error: Could not read or parse the JNLP file. at net.sourceforge.jnlp.Launcher.fromUrl(Launcher.java:491) at net.sourceforge.jnlp.Launcher.launch(Launcher.java:283) at net.sourceforge.jnlp.runtime.Boot.run(Boot.java:202) at net.sourceforge.jnlp.runtime.Boot.run(Boot.java:51) at java.security.AccessController.doPrivileged(Native Method) at net.sourceforge.jnlp.runtime.Boot.main(Boot.java:168) Caused by: net.sourceforge.jnlp.ParseException: Invalid XML document syntax. at net.sourceforge.jnlp.Parser.getRootNode(Parser.java:1274) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:204) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:188) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:173) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:159) at net.sourceforge.jnlp.Launcher.fromUrl(Launcher.java:482) ... 5 more Caused by: net.sourceforge.nanoxml.XMLParseException: XML Parse Exception during parsing of the XML definition at line 1: Unexpected end of data reached at net.sourceforge.nanoxml.XMLElement.unexpectedEndOfData(XMLElement.java:1094) at net.sourceforge.nanoxml.XMLElement.readChar(XMLElement.java:877) at net.sourceforge.nanoxml.XMLElement.scanWhitespace(XMLElement.java:596) at net.sourceforge.nanoxml.XMLElement.parseFromReader(XMLElement.java:500) at net.sourceforge.nanoxml.XMLElement.parseFromReader(XMLElement.java:464) at net.sourceforge.jnlp.Parser.getRootNode(Parser.java:1270) ... 10 more Caused by: net.sourceforge.jnlp.ParseException: Invalid XML document syntax. at net.sourceforge.jnlp.Parser.getRootNode(Parser.java:1274) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:204) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:188) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:173) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:159) at net.sourceforge.jnlp.Launcher.fromUrl(Launcher.java:482) at net.sourceforge.jnlp.Launcher.launch(Launcher.java:283) at net.sourceforge.jnlp.runtime.Boot.run(Boot.java:202) at net.sourceforge.jnlp.runtime.Boot.run(Boot.java:51) at java.security.AccessController.doPrivileged(Native Method) at net.sourceforge.jnlp.runtime.Boot.main(Boot.java:168) Caused by: net.sourceforge.nanoxml.XMLParseException: XML Parse Exception during parsing of the XML definition at line 1: Unexpected end of data reached at net.sourceforge.nanoxml.XMLElement.unexpectedEndOfData(XMLElement.java:1094) at net.sourceforge.nanoxml.XMLElement.readChar(XMLElement.java:877) at net.sourceforge.nanoxml.XMLElement.scanWhitespace(XMLElement.java:596) at net.sourceforge.nanoxml.XMLElement.parseFromReader(XMLElement.java:500) at net.sourceforge.nanoxml.XMLElement.parseFromReader(XMLElement.java:464) at net.sourceforge.jnlp.Parser.getRootNode(Parser.java:1270) ... 10 more Caused by: net.sourceforge.nanoxml.XMLParseException: XML Parse Exception during parsing of the XML definition at line 1: Unexpected end of data reached at net.sourceforge.nanoxml.XMLElement.unexpectedEndOfData(XMLElement.java:1094) at net.sourceforge.nanoxml.XMLElement.readChar(XMLElement.java:877) at net.sourceforge.nanoxml.XMLElement.scanWhitespace(XMLElement.java:596) at net.sourceforge.nanoxml.XMLElement.parseFromReader(XMLElement.java:500) at net.sourceforge.nanoxml.XMLElement.parseFromReader(XMLElement.java:464) at net.sourceforge.jnlp.Parser.getRootNode(Parser.java:1270) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:204) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:188) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:173) at net.sourceforge.jnlp.JNLPFile.(JNLPFile.java:159) at net.sourceforge.jnlp.Launcher.fromUrl(Launcher.java:482) at net.sourceforge.jnlp.Launcher.launch(Launcher.java:283) at net.sourceforge.jnlp.runtime.Boot.run(Boot.java:202) at net.sourceforge.jnlp.runtime.Boot.run(Boot.java:51) at java.security.AccessController.doPrivileged(Native Method) at net.sourceforge.jnlp.runtime.Boot.main(Boot.java:168)
Please, write me in talks.
I don't know whether you're using OpenJDK, but this is pretty much what happens there. You should use Sun's Java implementation under Linuxes and such.
I tried to use Sun Java 6 Web Start to open it, but I failed as well.
Previously, I used IcedTea Java Web Start to open it.
Прошу реализовать возможность просмотра чужого кода после окончания тренировки / виртуального участия вне зависимости от того, сдал ты задачу или нет. Ну или хотя бы возможность просмотра теста, на котором падает задача.
Поломалось скачивание условий в тренировках.
I don't know, may be it is not appropriate to write here. Today i tried to virtually participate in 2011-2012 Wrocław Short Training Contest (contest 7) ,but i couldn't download the problem statement. Each time it says can't send statement. What is the problem?
А куда исчез список последних тренировок, написанных виртуально? У меня их было штук 10, а осталась одна. Кроме того, тренировки, написанные в команде, но если на тренировку тебя регистрировал сокомандник, не отображаются, а хотелось бы наоборот.
Последнее время не могу зайти на ftp сервер в любую тренировку codeforces gym. У меня одного такая проблема? Как её решить?
Лучшего места не нашел, поэтому напишу сюда.
Решил добавить пробную тренировку с парой задач для дорешки. Вроде все просто: создал, нажал "добавить задачу", открылся Wizard. Дальше добавил задачу, дал ему директорию, он сам все распарсил. Дальше делаю Package, он вроде его сделал(76 МБ) и предложил залить сразу на сервер, что я конечно и сделал. Он вроде его загрузил, написал, что все прошло успешно.
И вот тут сюрприз: жму обновить соревнование, а он пишет, что не может извлечь ни одной задаче. Перехожу в taskbook — в директории этой тренировки ftp все как по умолчанию, а в contest.dat 0 задач.
Кто-нибудь сталкивался с подобной проблемой? Может я что-то забыл сделать?(Хотя все вроде интуитивно и однозначно). Пробовал несколько раз, результат тот же. Локально contest.zip сохраняет, выглядит адекватно.
Там вот в чем дело. При нажатии "Добавить задачу" визард открывается именно в режиме редактирования (т.е. чтобы добавить/изменить задачу) в готовом контесте. В таком случае на выходе визарда получается частичный пакет контеста. Мы поправим, чтобы в случае изначально пустого контеста визард запускался в обычном режиме.
Вам надо нажать "запустить визард" в голубом сайдбаре справа, там где инструкция написана.
Можно узнать, в мэшапы можно можно добавлять призраков? Если да, то каким образом? Есть поле для ввода Ghosts в администрировании, но что там писать без понятия. Где можно найти информацию об этом?
И еще по поводу инструкций на сайте polygon, в правом верхнем углу есть ссылка на "help", которая не открывается.
Вероятно, туда надо вставлять содержимое dat-файла. Потому что если попробовать просто нажать Setup, то будет ругаться на то, что не найден спецсимвол dat-файла или что-то такое. Формат этих файлов очень прост, достаточно зайти по FTP и посмотреть в тренировках.
Более-менее разобрался, но один вопрос остался по этому формату: Объявление участника: @t 0,0,1,"vepifanov" Первое — порядковый номер, но почему то далее в посылках нумерация участников с 1... Что означает второе и третье число?
И еще вопрос по взаимодействию полигона и мэшапов: Если я в полигоне создал соревнование, то можно ли его превратить в мэшап, кроме как создать мэшап и добавить туда задачи по одной?
Про формат.
Спасибо!
А система Polygon совместим с codeforces тренировками?
Я создал на Polygon-е тестовый контест с одной задачей, в которой возможено получить неполный балл за каждый тест.
Код валидатора
Добавил я различных тестов к ним. Прошёл верификацию и уже думал, что мои мучения окончены. Но не тут-то было.
Я скачал архив с задачей из Polygon-а и попытался скормить её wizard-у. Этот wizard оказался не таким уж волшебным и распознал фалы тестов чекера как тесты к задаче, а настоящие тесты — нет. К тому же, судя по списку типов, он не в курсе что такое Валидатор. Несмотря на то, что я исправил разметку файлов, он всё равно не смог залить задачу.
Затем я залил по FTP содержимое задачи в папку problems/A. Откатил обратно файл contest.xml (к счастью я сохранил его копию) и руками прописал в нём путь к задаче и условию. Чуда не произошло.
Не удалось выпустить релиз соревнования из-за ошибок валидации: On testset 'tests' SAS detected some errors in problem 'A': {{solution.cpp, test 1: Expected OK verdict on judging solution on answer equals to the produced output by solution. Checker returns nonzero on input, solution output, solution output as answer. Judgement returns: [verdict=CRASHED, exitCode=0, comment=Validator 'validator.exe' returns exit code 3 [FAIL Expected EOLN (stdin, line 1)], id=].}}
Что я делаю не так? Судя по этому посту создать подобную тренировку должно быть возможно.
UPD
Здесь мне объяснили, что нужно в Polygon-е добавить в Contest developers пользователя с именем "codeforces", после этого импорт по дескриптору задачи заработал.
Не могу найти пост "как стать тренером?" Можете кинуть, пожалуйста, ссылку?
How to add attachments to GYM contests?
I don't mean statements attachments. I mean additional files which are related to the contest but are not problem statements.
In Codeforces Contest Wizard, there is an option to add "Resources: tutorials, slides, etc." under the Attachments tab. I have done this and have uploaded the package to Codeforces Taskbook automatically. I check via FTP that the files are indeed inside the sandbox/files folder. However, unlike problem statement attachments, if I update the contest in GYM, these other attachments don't show up. I can't manually add them either because I don't know the URLs of these files.
I also know that it's possible to add attachments linking to external services like Google Drive, but since my attachments are already living in Codeforces servers somewhere (using Taskbook), I'm thinking there has to be a way to access and link them from a GYM contest. On reading the section about attachments in this blog, it seems it must be possible, but I'm not sure.
I can't find this information anywhere and already wasted some time tinkering. Has anyone tried this before? Can anyone help?