Блог пользователя MikeMirzayanov

Автор MikeMirzayanov, 10 лет назад, По-русски

Привет, Codeforces.

Уверен, многие в курсе — просто напомню. Polygon — это сервис для подготовки задач по программированию. Обычно используется в подготовке к олимпиадам, но часто и для учебных задач по информатике. Расположен он по адресу https://polygon.codeforces.com/ и открыт для всех желающих.

Я недавно обнаружил, что вот уже прошло более 5-ти лет как была создана система разработки задач Polygon. Самое время обобщить накопленный опыт использования.

Впервые о Polygon я публично рассказал в узком коллективе тренеров российских сборных на финале ACM-ICPC в 2009-м году. Я не скажу, что все восприняли разработку с энтузиазмом, были и те, кто высказал откровенный скепсис жизнеспособности и востребованности такой системы. Прошло 5 лет и на финале ACM-ICPC в Екатеринбурге Олег Христенко (человек-Снарк) сказал, что считает создание Polygon моей большей заслугой, чем Codeforces. Я, конечно, был удивлен, но Полигону это передал :-)

К началу работы над Полигоном (а это была осень 2008-го года) я приступил с точным осознанием необходимости подобной системы. К тому времени я уже был опытнейшим автором задач для большого количества контестов — бесконечное количество школьных Саратовских олимпиад, четвертьфиналы ACM-ICPC, мои задачи были на ВКОШП, РОИ, полуфинале ACM-ICPC NEERC, на финале TopCoder Open и еще много где. В большинстве случаев задачи разрабатывались в системе контроля версий, были разложены по папочками и структурировались какими-то полуформальными негласными правилами именования.

Ниже я попробую тезисно сформулировать, почему использование Полигона это хорошо, а неиспользование — плохо.

1. Полигон защищает от ошибок

В Полигон встроено множество средств автоматизации и самопроверки. Несколько примеров:

  • вам будет трудно опечататься в тесте из условия или забыть его актуализировать после изменения тестов, так как он вставляется автоматически, а ответ генерируется системой авторским решением;
  • вам будет трудно оставить в архиве некомпилирующееся решение (даже опытные команды типа ИТМО регулярно оставляют в архиве решения на Java, где имя класса не совпадает с именем файла);
  • вам будет трудно забыть сделать первый тест тестом из условия, Полигон покажет вам предупреждение;
  • вам будет трудно написать генератор, который инициализируется от времени и поэтому при последовательных запусках выводит разные тесты, Полигон запустит генератор пару раз с интервалом в секунду и проверит совпадение тестов.

2. Архивы (пакеты) задач Полигона единообразны и машиночитаемы

Поразительно, но олимпиадное сообщество за более чем 20 лет активного развития так и не стандартизовало способ распространения задач. Задачи из Полигона имеют одинаковый и логичный способ организации файлов и являются машиночитаемыми. Файл problem.xml содержит не только базовую мета-информацию вроде ограничений на время и память, но и в деталях всё что понадобится для последующей автоматизированной работы над задачей.

Вот несколько примеров:

  • для TL указан тип процессора, для которого он был выбран;
  • явно указан способ ввода-вывода и имена файлов, если таковые используются;
  • название задачи с поддержкой многоязычности;
  • точный способ генерации каждого из генерируемых тестов;
  • теги решений (например, заведомо медленное решение, может быть помечено тегом time-limit-exceeded);
  • точные пути до тестов и прочих ресурсов.

Мне не известны другие используемые настолько полные машиночитаемые форматы дескрипторов.

3. Полигон берет на себя долговременное хранение и доступность

Я прям сейчас могу открыть задачи Саратовского четвертьфинала ACM-ICPC 2009-го года, поправить тест. Все те, кто имеет права на задачу, могут сделать тоже самое. Все изменения будут видны всем авторам, они будут нотифицированы по email, а автоматические системы могут подхватить изменения после перевыпуска пакета. Во время правки я могу запустить решения, все тесты будут провалидированы, решения запущены.

Что же обычно происходит, если Полигон не используется? На время разработки олимпиады поднимается сервер системы контроля версий, обычно потом он гасится, остается только архив: теряется история правок, доступы на разработку, автоматизация запусков и других действий.

4. Полигон сокращает порог вхождения в процесс подготовки задач

Авторами Codeforces являются участники соревнований разного уровня подготовки, разного культурного и профессионального бэгграунда, для многих — это первый опыт подготовки задач. Почти всегда они с легкостью понимают что и как надо делать, что и как добавлять.

Если Полигон не используется, то процесс обычно регулируется системой негласных правил (медленное решение называйте с суффиксом _slow, ну или _tl), неопытному участнику непонятно с чего начинать и как. Кроме того, обычно требуются знания основ работы с svn и командной строкой, а работа для пользователей Windows и Linux различается.

5. Полигон помогает управлять доступом

В Полигоне вы можете взять и дать права на задачу любому зарегистрированному пользователю. При работе без Полигона, этим обычно занимается администратор сервера с системой контроля версий, а вам недоступен даже список соавторов. Вы не можете сами управлять доступами, управление происходит обычно на уровне контеста, а не задач.

6. Полигон имеет issue-tracking

Возможность добавления и управления заданиями просто необходима при одновременной работе более чем одного разработчика. Более того, issue-tracking востребован и при индивидуальной работе. Работа структурируется, мелочи не забываются. Сколько я работал вне Полигона — верхом управления заданиями был специальный файлик с нумерованным списком заданий.

7. Полигон легко интегрируется с тестирующими системами

Полигон предоставляет машиночитаемые пакеты задач с подготовленными тестами (как для Windows, так и для Linux), так и с возможностью их сгенерировать при разворачивании пакета. Полигон имеет простой HTTP POST-based API для доступа к данным. При формировании POST-запросов надо передавать параметры login и password пользователя (и опционально revision).

Откажитесь от ручного копирования задач в тестирующую систему, пусть она сама выкачает задачу и задеплоит или обновит ее.

8. Без Полигона требуется специальный софт на компьютере разработчика

Например, разработчику на Windows может понадобиться bash, чтобы запустить doall.sh, генерирующий все тесты. Или Java-программист будет вынужден поставить C++, чтобы скомпилировать чекер. Для компилирования условия ставьте LaTeX.

Полигон избавляет от всего этого, многое делается на стороне сервера.

9. Полигон безопаснее большинства альтернативных способов совместной разработки

Полигон использует HTTPS, привязку к IP-адресу (опционально, рекомендуется), привязку к браузеру, CSRF-токены всюду.

10. Полигон классифицирует и индексирует задачи

Вы никогда не запутаетесь в задачах. Только созданных мной задач в Полигоне около 500, но благодаря тега, фильтрам, поиску и распределению по контестам, я в них не путаюсь и могу быстро найти что надо.

The End

Это только первые причины, что пришли мне в голову в два ночи. Уверен, что хорошенько подумав, можно сообразить и другие.

Вывод простой. Каждый раз, когда вы создаете задачу не в Полигоне, то бог убивает котенка.

  • Проголосовать: нравится
  • +260
  • Проголосовать: не нравится

»
10 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

А у Вас не было мысли платно лицензировать Полигон для установки на сторонний сервер? Тогда, возможно, даже параноидальные румыны согласятся пользоваться им для подготовки SEERC'а.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится -28 Проголосовать: не нравится

    Если нужда в подготовке контеста возникает раз в год, то сделать это можно и в MS DOS, если на пункт "проверить, а все ли нормально" выделить больше десяти минут.Острая необходимость в Полигоне скорее есть у людей, занимающихся этим более регулярно.

    • »
      »
      »
      10 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +14 Проголосовать: не нравится

      .

      • »
        »
        »
        »
        10 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

        Мысль(весьма очевидная, как мне казалось) в том, что тысячи задач и контестов были успешно подготовлены и без полигона. В силу этого, мне кажется, что основная проблема румын не в отсутствии этого самого полигона.

        Если присмотреться, то можно увидеть, что я ничего хорошего/плохого не сказал про Полигон. Акцент на другом.. Почему-то, большинство думает, что поход к хирургу исправит плохого танцора.

        Может я что-то не понимаю/знаю, тогда скажи)

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится +14 Проголосовать: не нравится

Все правильно. Полигон — очень круто. Но вот как это происходит у меня:

Во вторник утром я опять побочным эффектом от делания задачек убил двух котят... Примерно за полчаса в сумме. Это в разы меньше, чем ушло бы в полигоне.

А сколько ништяков дает интегрирование всех сделанных задачек с моей файловой системой... Возможность быстро смотреть файлы, умный поиск, скрипты!

А еще помню страшный летний анекдот "XXX, дай задачку? а она в полигоне! ну так дай задачку! а полигон то ли лежит, то ли тормозит...". Возможно это единичный случай, но =(

P.S. Или я отстал от жизни, и задачки из полигона уже можно интегрировать ко мне на комп? хотя бы в readonly режиме.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +7 Проголосовать: не нравится

    А еще помню страшный летний анекдот "XXX, дай задачку? а она в полигоне! ну так дай задачку! а >полигон то ли лежит, то ли тормозит...". Возможно это единичный случай, но =(

    Это все-таки свойство ЛКШатского полигона. Саратовский им не обладает.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Еще как обладает. Лежит вроде редко, но вот зато вылогинивать мастер.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +15 Проголосовать: не нравится

    Во вторник утром я опять побочным эффектом от делания задачек убил двух котят... Примерно за полчаса в сумме. Это в разы меньше, чем ушло бы в полигоне.

    Можешь расшифровать?

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      В смысле, рассказать, что конкретно быстрее?

      1. Ползадачи = шаблон

      2. Навигация по файлам, время доступа к файлам, скрипты

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится +9 Проголосовать: не нравится

        Я не понял фразы "побочным эффектом от делания задачек убил двух котят".

        Теперь увидел "Каждый раз, когда вы создаете задачу не в Полигоне, то бог убивает котенка" в конце поста, стало понятно :)

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +25 Проголосовать: не нравится

    Это в разы меньше, чем ушло бы в полигоне.

    Я думаю здесь ты применил литературную гиперболу. Если у тебя уходило по 15 минут на каждую из задач, то хотя бы даже полигонизировать ее после — дело +5 минут. Используя Полигон, ты не подписываешь кровью обязательство не использовать локальную файловую систему и всё прочее. Однако не имея на настоящий момент эти две задачи в Полигоне, была потеряны половина полезных штук из поста.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +13 Проголосовать: не нравится

      Да, ты прав, я имел в виду именно "разработку в polygon" vs "разработку в привычной среде обитания". И там разница действительно в 2-3 раза, а то и больше. Я часто делаю простые задачи, на написание именно кода там уходит мало времени.

      Залить в полигон -- не проблема и это действительно дело 5 минут. Но потом что? Если задача меняется, а она будет меняться, у себя локально я могу это быстро исправить. Overhead на синхронизацию с полигон все еще велик. И риск ошибочной синхронизации, пока это не делается автоматикой тоже есть. Об этом Паша ниже писал.

      Видимо, более интересный вопрос не где делать задачи, а где хранить. Тут с одной стороны проще перейти на polygon, с другой стороны очень не хватает API для автоматизации внесения изменений снаружи.

»
10 лет назад, # |
  Проголосовать: нравится +19 Проголосовать: не нравится

На самом деле некоторых вещей недостает. А именно, местная система контроля версий мало что умеет. Было бы удобно, например, смотреть историю файла или чекаутить прошлые версии. Может быть, можно как-то соединить полигон с готовой системой контроля версий?

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится -8 Проголосовать: не нравится

    Так ведь все изменения на почту отправляются, там можно все версии посмотреть.

»
10 лет назад, # |
Rev. 2   Проголосовать: нравится +11 Проголосовать: не нравится

Могу сказать, чего мне не хватает в полигоне, и почему я все-таки предпочитаю svn, для всего кроме ЛКШ. В ЛКШ надо каждый год делать примерно одни и те же задачи, поэтому преимущество от того, что задачу легко найти и исправления будут один раз навсегда перевешивают.

  1. Полигон хорошо подходит для сферической задачи в вакууме. Но стоит чуть-чуть отклониться от стандартного формата, и сделать нельзя ничего. Пример.
    1a. Общий код в разных частях задачи. Например генератору нужно решение, чтобы подобрать тест, максимизирующий какой-то параметр. Конкретный случай — какая-то задача с одного из ASC, которую мы с KAN долго и мучительно заливали в полигон в ЛКШ.
    1b. Задачи, в которых тест зависит от ответа на предыдущий. Если хочется сгенерировать какой-то специальный тест, необходимо знать ответ во время генерации, что требует копирования кода. Альтернатива, которая спокойно сделается локально — запустить решение, которое не будет учитывать эту зависимость, потом подменить тест, так, чтобы он перешел в нужный.
    1c. Задачи в которых требуется нетривиальный запуск/компиляция решений. Примеры — почти все сборы к IOI. Кроме того, даже если есть одна такая задача, то делать хоть что-то в полигоне не удобно. Кажется, что желание, чтобы все было в одном месте логично.
    1d. Требуется какая-то дополнительная валидация. Например группы тестов.
    1e. Хочется иметь возможность посмотреть на тест глазами. Локально я написал визуализатор и запустил его. В полигоне, я должен сделать 15 кликов мышкой, чтобы достать тест, перед этим.
    1f. Есть какая-то задача, в которой решений приближенное. Но генератор знает точный ответ. Привет от контестов Petr. Он их делает в Polygon, в результате решение, которое генерирует точно правильный ответ, выглядит как мегабайт констант, которые по хешу теста выводят точный ответ, и генерируется генератором локальным запуском. Самое простое решение, правда?
    1g. Еще 10 идей, которые пока не приходили в голову, но придут, когда будут уместны.
  2. Существенно более медленный и неудобный доступ к файлам. В целом, про это уже написал Burunduk1 к нему мне добавить нечего.
  3. Несколько копий одного и того же. Если я дебажу решение, то у меня есть локальная копия, и копия в polygon. Мне надо самому заботиться о том, чтобы их синхронизировать. Я точно помню, несколько случаев, когда исправлял баг не в той и потом затирал.
  4. Возможность сделать что-то хитрое в tex с большими проблемами. Например, хочу добавить картинку, в качестве пояснения к сэмплу. Ну или не картинку, а расшифровку, если например тест содержит параметры генерации. Для этого в olymp.sty есть окружение examplethree. Если пример один, то делать это костыльной правкой problem.tex я научился. А если несколько? Вообще про условия призывается Gassa.
  5. Скорость действий. В полигоне на любое действие надо совершить кучу кликов мышкой. На каждый надо подождать ответ, пока сервер что-нибудь скомпилирует или еще что-нибудь. Сколько времени у меня займет залить 5 решений отличающихся в паре строк, чтобы проверить что ни одно из них не работает? Кроме того, некоторые действия выполняются загадочно долго. Например, у меня до сих пор есть ощущение, что для массового Invokation Main Solution и генераторы, запускаются отдельно для каждого решения. Иначе объяснить скорость работы я не могу. Про генераторы, которые генерируют все тесты сразу, я вообще молчу. Или это уже поправили?

Мне этого уже больше чем достаточно, чтобы использовать полигон только в ЛКШ, где преимущества это все все-таки перевешивают, и когда у меня нет выбора (например раунд на CF, открытая олимпиада). И то в случае ЛКШ, я в основном заливаю готовые задачи, а если делать новую, предпочту сначала максимально сделать все локально, а потом залить.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +33 Проголосовать: не нравится

    По пункту 1 (нестандартный формат сложно упихать в стандартный дескриптор) поддержу. Как сделать дескриптор стандартом, но расширяемым — отдельная интересная задача.

    По пункту 4 (нестандартные условия) — по факту так: в Петрозаводске готовые в Полигоне условия просто выкачиваются и доформатируются пару минут руками, так проще и быстрее. Очевидный недостаток такого метода в том, что баги после этого надо исправлять в обоих местах.

    По пунктам 2, 3 и 5 (скорость действий и локальная копия) — консольный клиент к Полигону с рабочей копией на локальном диске и синхронизацией в стиле систем контроля версий мог бы оказаться решением.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      А как предлагаете разносить функциональность между консольным клиентом и Полигоном? Вопросы управления задачами оставлять на уровне полигона, а всё что касается работы с файлами — выносить в клиент?

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Может быть, можно создать такой консольный фреймворк для работы с задачами? Чтоб он умел запускать тесты, валидаторы, проверять все как положено. Например, добавляешь новое решение — прописываешь его в xml-ке — и оно подхватывается.

        Собственно, наверняка внутри полигона что-то такое уже имеется и работает. А поверх такой штуки уже можно использовать любую систему контроля версий.

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Продублировать какие получится функции в виде консольных команд. Чтобы вместо "кликнуть 100 раз мышкой" было возможно "запустить один скрипт", где один раз заранее написаны 100 эквивалентных команд.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +10 Проголосовать: не нравится

      Я считаю, что когда у polygon'а будет полноценный api (Или уже есть? Летом я спрашивал у Fefer_Ivan, ещё не было), консольных клиентов понапишут достаточно сами — добавят поддержку во всякие t, Makefile от PavelKunyavskiy и прочее.

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        В общем-то да, консольный клиент был бы простым следствием из достаточно полного API.

  • »
    »
    10 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Ребята из комментариев снизу напомнили: в polygon нельзя выбрать компилятор для файла, он автоматически определяется по названию файла. То есть, не отличить python2 от python3 (это разные языки, если что), не различить версии gcc или хотя бы стандарта для c или c++. А файлы с суффиксом «.c++» вообще не залить.

    (Интересно, умеет ли polygon хотя бы отличать файлы «.c» от «.C» и проставлять для последнего c++?)

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +17 Проголосовать: не нравится

    По поводу дубликации кода.

    Весь общий код можно вынести в header файл и добавить его к ресурсам контеста. Там же, где лежит testlib.h. Тогда если валидатору, чекеру и генератору нужен будет общий код, они смогут его получить через, например, #include <problem-commons.h>.

    Решениям этот header, правда, не будет доступен.

»
10 лет назад, # |
  Проголосовать: нравится +19 Проголосовать: не нравится

А почему бы не выложить полигон в open-source? Это решило бы сразу все проблемы: и для параноиков, которые не хотят отдавать задачи кому-то ещё, и для обычных людей, которым не хватает каких-то фич (они смогут их сами прикрутить).

»
10 лет назад, # |
  Проголосовать: нравится +24 Проголосовать: не нравится

Конечно, было бы хорошо, чтобы поддерживались группы тестов (и иные особенности школьных олимпиад), и "расширенные" возможности по оформлению условий (на практике действительно бывает проще и быстрее править TeX-файлы локально), и ряд других полезных вещей. Но это, наверное, требует каких-то нетривиальных доработок (и заметного времени на них).

А напомнить хотелось бы об одной вещи, которая примерно год назад была оценена как достаточно легко внедряемая в существующую систему — о разборе, который был бы "интегрирован" в задачу и собирался бы в отдельный TeX-файл (а также pdf и html) как для задачи, так и для контеста в целом (так же, как собираются сейчас условия).

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +2 Проголосовать: не нравится

    Вот здесь я тоже хочу поддержать. Это же реально не так сложно внедрить, но это позволит автоматизировать процесс подготовки разбора к задачам раундов, а так же, сделает удобным подготовку разборов, например, к контестам в Петрозаводске и его зеркале в Ижевске. Ижевские команды ну ооочень оценят.

»
10 лет назад, # |
  Проголосовать: нравится +16 Проголосовать: не нравится

Отдельный вопрос — за Polygon спасибо, пользуемся, благодарны. Но именно потому, что пользуемся, появляются некоторые вопросы и пожелания.

(1) Как-то уже предлагалось (не помню точно, кем, но точно предлагалось) ввести более подробные статусы решений. Что-то наподобие "это (неправильное) решение ОБЯЗАНО дать хотя бы на одном тесте TLE, ОБЯЗАНО дать хотя бы на одном тесте WA, и кроме того МОЖЕТ на некоторых тестах дать RTE". Как по мне — гораздо более полезно для контроля полноты тестов, чем то, что есть сейчас.

(2) Иногда всё же было бы супер-удобно позволять копировать задачи и потом править разные копии по-разному. Особенно это могло бы быть полезным для НЕ_олимпиадных задач с автоматической проверкой — например, http://informatics.mccme.ru/mod/statements/view3.php?id=3700&chapterid=3602#1 и http://informatics.mccme.ru/mod/statements/view3.php?id=3700&chapterid=3603#1 Кстати, при достаточно аккуратной реализации branch-ей это могло бы даже уменьшить общее количество хранимых на сервере полигона данных!

Оба следующих вопроса касаются вопроса взаимодействия polygon и ejudge. Вроде ведь никто из них НЕ_позиционирует себя как конкурента другого или как "будем делать назло другому". Тогда почему, почему???

(3) Неоднократно случалось изменение протокола взаимодействия, из-за которого ломался импорт задач в еджадж. Аж интересно, чего ради-то, и неужели никак нельзя этого избегать...

(4) Почему заодно с формированием .tex и .html версий условий нельзя сформировать ещё и .xml-версию согласно требований ejudge? По идее, раз уж реализовано .html, то и там должно быть несложно...

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    (4) — почему не выкладывать в еджадж pdf-ку? Ведь распечатываете для участников вы именно pdf-ку.

    • »
      »
      »
      10 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

      Повторю свой собственный ответ в одной из других тем:

      Тоже, конечно, выход, но как по мне — малость костыльный.

      1) Иногда можно сомневаться в наличии/адекватности/... pdf-viewer-а, тогда как наличие web-browser-а и так и так неминуемо необходимо

      2) Насколько понимаю, всякий более-менее адекватный способ прикрутить условие задачи в еджадж так, чтоб онО отображалось в веб-браузере, будет давать гарантированно правильные еджаджевские time limit, memory limit, имена файлов. С отдельно собранными pdf уследить за этим труднее, особенно когда у автора нет возможности достаточно заранее и достаточно подробно тестить различные решения задачи именно на том же сервере, где будет проходить собственно контест, и как следствие ограничения (особенно по времени) приходится менять в последний момент.

      3) Всё-таки удобно иметь условие задачи и кнопку "Отправить решение" на одной странице.

      (Конец самоцитаты)

      Кстати, бывает и так, что бумажный вид в принципе никому не выдаётся. Когда, например, формат официально заочный или полу-заочный (на многих площадках, официальных, но удалённых друг от друга). Разумеется, только для личных олимпиад, не для ACM, где важно наличие отдельных от компа копий условий.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Пожалуйста, рады быть полезными.

    1. Вполне вероятно. Стоит подумать, но совсем автоматически это контролировать не получится. Например, изменив тест перед коммитом всё равно вы должны будете запустить решения на тестах у убедиться, что не возникло ошибки.

    2. Копирование задач может оказаться полезным, сами попадали несколько раз в эту ситуацию. Кажется, это не сложно сделать. Обсужу с разработчиками.

    3. На моей памяти только 1 раз было изменение без обратной совместимости. Обычно мы стараемся ее поддерживать и что-то может поломаться только в очень редком случае. Можете напомнить о чем речь?

    4. Я вот не знаю ничего о xml-формате условий, мне кажется это какой-то внутренний формат ejudge. В данном случае, предпочту, чтобы ejudge или его операторы научились автоматически конвертить из tex/html в свой xml.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      К пункту (3). Может я чего недопонимаю, но, даже если списать на лично мою криворукость все случаи, когда чего-то не работало у меня, вроде как остаются как минимум два разных случая:

      == первый ==

      В теме https://ejudge.ru/forum/viewtopic.php?f=5&t=1808 (от осени 2013-го) написано:

      xxx: При попытке импорта вылетает послание "polygon login action failed: invalid login or password?", хотя в логине и пароле я уверен(в конфигах всё пишется как надо). ... ... ... Что я делаю не так?

      cher: Полигон летом изменил протокол взаимодействия. Поддержка нового протокола взаимодействия будет реализована в следующей версии.

      == конец первого, начало второго ==

      Не так давно В.М.Гуровиц писАл (внутри комментариев к http://vk.com/wall1695846_11590 ), что загрузка из полигона в еджадж не работает нигде, ибо опять был изменен (со стороны полигона) формат взаимодействия.

      == конец второго ==

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        cher неправ, изменили не летом, а недавно совсем (неделю назад примерно). Было изменено название поля в форме авторизации (login -> loginOrEmail) — к API это не имеет никакого отношения. То что ejudge парсит странички и таким образом взаимодействует с Полигоном — неудачный способ интеграции. То, что это захаркожено в ejudge, а не является конфигурируемым параметром, тоже неудачный ход. Например, в этом тексте указано, как выкачивать материалы прямым способом через API.

        На самом деле я уже попросил нашего разработчика сделать fallback в старый параметр (костыль-костылем) как раз под ejudge. Полагаю, в понедельник внедрим.

»
10 лет назад, # |
  Проголосовать: нравится +38 Проголосовать: не нравится

А сколько котят убивает бог, когда при создании задачи в Полигоне автора задачи вылогинивает за неактивность? Если больше 0.5, то с точки зрения максимизации кошачьей популяции выгоднее все-таки Полигоном не пользоваться :-)

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Не всегда максимизация кошачьей популяции идёт на пользу: например, вот этих птичек кошки истребили полностью :с

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Об этой проблеме я не знал и почему-то на нее не попадал. Я сейчас перенес место хранения сессий, должно всё починиться. Спасибо!

»
10 лет назад, # |
  Проголосовать: нравится +23 Проголосовать: не нравится

У меня сложилось впечатление, что полигон как проект — мёртв (т.е. им никто не занимается):

  1. Багтрекер и документация недоступна (потому что они находятся на сайте http://codecenter.sgu.ru:8088/)
  2. Python 3? Не, не слышали.
  3. Как руками отрендерить условие из .tex файла — непонятно.
  4. Хотелось бы удалённый доступ к системе управления версиями, а то редактирование через веб-интерфейс — крайне неприятное занятие.

Главная проблема — п.1. По этому поводу я два раза писал в личку MikeMirzayanov, но судя по отсутствию какой-либо реакции, эти сообщения отправились в /dev/null.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    (3) — можно же выкачать пакет с задачей, зайти в папку statements и там тыкнуть на run.bat / run.sh, нет?

  • »
    »
    10 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +15 Проголосовать: не нравится

    2. c++11 там же, к слову.

    (а маркдаун настолько умный, что считает, что нумерует элементы лучше меня)

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится +11 Проголосовать: не нравится

    Совсем не мертв: на днях появилась галочка при логине "Attach session to IP address (more secure)", стало возможным создавать задачу прям сразу в контест (одновременно выдав нужные права разработчикам контеста), появились звездочки "избранное" на задачах внутри интерфейса контеста. Кроме того, в комментариях обратили внимание на необоснованные логауты — я думаю, что сегодня решил эту проблему. Да и как может быть мертв проект, который является ключевым в нашей инфраструктуре и в котором подготавливаются все задачи Codeforces?

    По пунктам:

    1. My bad. Я сделал багтрекер на github, но выяснилось, что он требует авторизацию для того, чтобы оставить issue. Может и норм, тогда просто надо поменять ссылку. А вы знаете достойную замену с возможностью анонимными пользователям оставлять issues? Документация устарела и не уверен, что так она и нужна. Я постоянно возвращаюсь к идее сделать Complete User Guide, но рук не доходят. Видимо пока просто уберу ссылку.

    2. Из-за того, что разработчики Python 3 приняли какие-то странные решения — его трудно поддержать. Как я понимаю — формально Python 2 и Python 3 разные несовместимые языки. Однако программ на них одинаковые расширения (что ладно, это нормально), так еще и интерпретатор одинаково называется python. Я не очень понимаю, как в таком случае писать, например, doall скрипты. Сейчас в них запускается просто python, в надежде что это Python 2 (что так и есть в большинстве случаев). Опять же, пока питон в полигоне один, выкачавшему пакет трудно ожидать, что в этом месте имеется ввиду Python 3. А вот при появлении двух Питонов (зоопарка Питонов!) всё становится менее очевидно. Я не спец в Питоне, может есть какие-то элегантные решения?

    3. Вы имеете ввиду, что хорошо бы в пакете иметь файлики типа generate-pdf.{sh,bat}? Я о таком и не думал, почему-то мне такое не было нужно. Это, вероятно, добавить не трудно.

    4. Это не просто — во внутренней рабочей копии поддерживается всякая генерация метаданных, что возможно сделать — это readonly способ выписать свою working copy. Эта мысль мне пришла уже после чтения комментариев здесь. Но не уверен, что это сильно спасет. Писать свой API довольно сложно и ресурсов на это пока нет. С другой стороны, как писал выше — я подготовил более 400 задач в Полигоне и как пользователь сильной необходимости не вижу.

    • »
      »
      »
      10 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +3 Проголосовать: не нравится

      «…так еще и интерпретатор одинаково называется python»

      Это проблема конкретно windows. В других системах, конечно же, есть отдельные интерпретаторы python2 и python3.

      Если очень хочется автоматически отличить исходник на python2 от исходника на python3, то следует посмотреть на shebang. Если там конкретно написано, какой язык использовать, то и отлично, а если нет — автор исходника сам долбак и использовать какой-нибудь по умолчанию.

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится +12 Проголосовать: не нравится

        Уже получше, но в Windows проблема остается. И это, конечно, проблема не Windows, а Питона )

        • »
          »
          »
          »
          »
          10 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Согласен, авторы windows-сборки питона могли бы подумать головой. Но увы.

          • »
            »
            »
            »
            »
            »
            10 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            Кстати! Я только что обнаружил workaround py -2 и py -3, это конечно не так круто, но всё-таки. Если они правда работают для всех комбинаций инсталляции, то это может быть выход.

»
10 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

По-моему главным является пункт 4 — "Полигон сокращает порог вхождения в процесс подготовки задач."

Как видно в комментариях, в недовольных оказались только опытные составители задач, а не новички. Ну так на здоровье, делайте все в своих папочках на компьютере, а когда он потеряется или полетит жесткий диск, то и ваши задачи уплывут.

В то же время во всем цивилизованном мире уже давно используют фреймворки — а Polygon как раз и есть тот самый фреймворк для создания задач. И пусть он иногда медленный, это разумная плата за надежность. По сути, Polygon позволяет создавать контесты, вообще ничего не храня на диске — код можно успешно писать и компилировать на ideone, а все остальное делать в Полигоне.

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Действительно, очень хорошо, что Полигон есть. Новым авторам задач легче их делать в первый раз в Полигоне, чем дублировать в очередной раз нужную часть его функциональности. Организаторам легче использовать получающиеся задачи, поскольку их формат более-менее унифицирован. Это несомненная заслуга Миши Мирзаянова.

    И логично, что у более опытных авторов задач накопились наработки, которые не совместимы с Полигоном, и это затрудняет его использование. Что-то же они сами использовали вместо Полигона всё это время. Ну и Полигон, естественно, не идеален.

    Кстати, про использование IdeOne в качестве инструмента подготовки задач звучит забавно: если забыть выставить видимость, код будет public, и это может привести к спецэффектам на соревновании.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится -18 Проголосовать: не нравится

      Всякий раз, когда не могу решить задачку больше десяти минут, начинаю листать паблики в айдеоне :)

  • »
    »
    10 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Ну вот это довольно однобокое восприятие. Я же писал — даже у опытнейших авторов из-за отсутствия инструментария и автоматизации попадаются обидные баги.

    Я уже не говорю, что на выходе получаются не машинночитаемые пакеты, а архивы для ручной обработки (а это принципиальная разница). Ну вот даже архив опытнейшей группы авторов с важного контеста RCC Финал 2014 содержит несколько причин, почему требуется ручное вмешательство при его разборе:

    • вперемешку решения на C++ и C++11 без каких-либо пояснений что на чем,
    • booltree_akov_n2.cpp имеет стандартный ввод-вывод,
    • вместе с решениями в куче лежат какие-то вспомогательные файлы, типа knapsack_av_test.java и knapsack_av_stress.java.

    Кроме того, отсутствуют условия в LaTeX, что усложняет переиспользование задач. В архиве отсутствуют библиотеки testlib/testlib4j и нет каких-либо ссылок на них. Отсутствуют генераторы и способы генерации тестов, что усложняет их последующую поддержку при необходимости.

    Кстати, справедливости ради еще раз отмечу — что это очень хороший архив контеста, у многих других авторов или других контестах ситуация намного хуже.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится

      По поводу первого пункта: И что-то действительно меняется если все компилировать под c++11 (не компилятся, имеют другое поведение)?

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится +9 Проголосовать: не нравится

        Ну вроде 100% обратной совместимости нет, вот здесь, например, http://stackoverflow.com/questions/6399615/what-breaking-changes-are-introduced-in-c11 кое-что написано. То есть теоретически напороться на что-то можно, рисковать в общем случае не хочется.

        • »
          »
          »
          »
          »
          10 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

          Я понимаю, что 100% совместимости нет, (а еще понимаю, что все-таки случайный код обычно обратно совместим, а чтобы получить несовместимый нужно постараться, но это все не важно)

          Мне интересно, почему не верно утверждение, "все решения авторов финала RCC 14 написаны на c++11".

          Мысли в сторону: да почему стандарт, который вышел 3 года назад и скоро перестанет даже быть последним(или уже?, я не очень слежу) все считают настолько новым, что c++ по умолчанию — это не он. Никто же не говорит, что есть Java и Java 8. :(

»
9 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

The best part of Polygon:

Easier platform -> More contest writers -> MORE CODEFORCES ROUNDS!

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Hi, Mr.Mirzayanov, perhaps you could help us with a polygon issue. Recently, minimario and I have been trying to prepare problems on Polygon; however, it seems that input with space separated integers is not supported for standard checkers (and the checkers I made...). The checker crashes each time... Thanks in advance, trophies

PS: I post here, because, if any other people are facing the same problem, they can just look at this thread.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    It is completely supported. I think that you are doing somethig wrong. You can share a problem to any experienced writer and he could help you.

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

https://polygon.codeforces.com/c/contestid/english/statements.pdf Does this means if I write https://polygon.codeforces.com/c/482/english/statements.pdf i will be able to download the Round 275 Div1 problems as pdf?

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    No, contestid stands for the internal Polygon id of a contest in the Polygon. Polygon doesn't know about Codeforces.

    This feature is useful to integrate some online judge with Polygon.

»
9 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Вопрос: Если я решил провести олимпиаду для учащихся школы , то можно ли использовать Полигон? Составить задачи, залить тесты можно. А как сделать,чтобы задачи тестировались по правилам личной олимпиады.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Полигон не тестирует задачи участников, он помогает подготовить задачи. Используйте задачи в системе тестирования, которая поддерживает правила школьных олимпиад.

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

Оставлю свой скромный комментарий:

  1. это очень круто "- вам будет трудно забыть сделать первый тест тестом из условия, Полигон покажет вам предупреждение;" но я сейчас специально проверил это, и не смог найти никакого предупреждения. Поясните пожалуйста в каком оно виде? (при создании тестов, условия или при коммите?). Может сделать более заметным если оно есть?

  2. Я бы попросил пойти чуток дальше и сделать проверку что все (а не только первый) тесты условия есть сколько-то первых тестов в тестсете. Это сделать сильно проще многих вещей обсуждаемый здесь) Сам уже два раза сталкивался с такой ошибкой.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +7 Проголосовать: не нравится

    Там число, которое количество тестов оранжевое.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    1. Предупреждение показывается в блоке с summary по задаче справа. Раз оно не заметно, то мне кажется хорошей идеей выносить все предупреждения еще на страницу, где делается коммит.

    2. Именно так и делается. Поясняющее сообщение: Samples are not first tests.

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится

      Круто когда хотелки уже давно сделаны, спасибо =) все проблемы от незнания.. Да было бы круто вынести предупреждение еще и на страницу с коммитом

»
9 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится

"I first publicly spoke about Polygon in a narrow circle of Russian teams' coaches on ACM-ICPC World Finals in 2009. I cannot say that everybody was enthusiastic about the innovation. Some people were openly skeptical about such system's viability and relevance."

Its nice to see when a new idea that is not well accepted at the beginning takes flight, and becomes something as useful as Polygon is now.

F*ck the skeptics, and keep up the good work!!

»
9 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

Are there any ways to make members in a group can view wrong testcase from Codeforces Mashup?

»
9 лет назад, # |
  Проголосовать: нравится +36 Проголосовать: не нравится

Polygon looks great! I started to develop a problem.

One question. What languages are supported for checkers, validators, generators, and sample solutions? Thanks.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +18 Проголосовать: не нравится

    Thanks! Right now Polygon supports C++, Java, Python 2, Perl and Ruby. In nearest plans to support Python 3 and C++0x. The main reason why we do not support wide range of languages that a problem package should be easy to build. For example, as you know it not easy to install OCaml on Windows correctly. And it is not cool to require it to build a package.

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Hi, Polygon looks like a great system! Thanks!

However, I couldn't figure out how to download all test data (input + output files).

I suppose this should be handled by Packages, but whenever I create a full package I get PackageException: Got exception while generating tests.

Please help!!

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Are you sure that complete invocation returns no error? I'll write you in usertalks the details.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Your problem fails to be run on testset "tests". You have invalid test or something like it.

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Oh, Yes..!!

      I was only using the other testset, so didn't realize this. Thanks for the help. It's really an awesome tool.

»
9 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится

Я просто оставлю это тут. И закрою вкладку :)

»
9 лет назад, # |
Rev. 3   Проголосовать: нравится +5 Проголосовать: не нравится

.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Вообще можно подменить olymp.sty в файлах соревнования. См. ссылку Properties/Files.

    Мы там комментили строчки "имя входного файла" и "имя выходного файла", чтобы условие на одну страницу влезало и чтобы новички не пытались использовать файл с именем stdin.

»
9 лет назад, # |
  Проголосовать: нравится +15 Проголосовать: не нравится

Вот внезапно не так давно писал в рассылку Нижегородской городской олимпиады по информатике, чем мне не нравится полигон. В итоге, правда, мы вроде сошлись на мысли, что большинству членов жюри полигон удобнее, и поэтому будем на него переходить, но тем не менее приведу ниже соответствующий фрагмент моего письма с мелкими правками (в квадратных скобках). (Конечно, многие моменты тут уже были освещены другими комментаторами.)


Во-первых, это какая-то непонятная закрытая система. Никто не гарантирует, что она будет доступна еще 5-10 лет (а у нас в тикетах задачи с 2008 года, а в svn — вообще последние 8 олимпиад). При этом если *** [используемый нами хостинг свн] закроется, мы без особых проблем переедем на другой хостинг trac+svn, или даже довольно просто поднимем такой хостинг сами (я думал над этим, но пока не вижу необходимости). Если закроется полигон, то что делать?

(Вот сейчас я могу легко добыть архив ЛКШ до ~2011 года, причем именно в форме репозитория — все рабочие файлы там есть; в свое время создавались архивы и т.д.. Начиная с 2011 года в ЛКШ во многих параллелях используется полигон, и возобладало мнение, что делать архивы параллелей не надо, т.к. "все есть в ejudge и в полигоне". Но в результате, когда мне некоторое время назад понадобились какие-то материалы, я их добыть не смог, т.к. ЛКШасткий полигон лежал.)

Во-вторых, я не знаю, как "основной" полигон, но тот полигон, который используется в ЛКШ, крайне нестабилен. Постоянно у тех, кто работает в полигоне, возникают проблемы, что он недоступен, или что нет инвокеров и т.д. При этом если сервер полигона отвалился, то сделать ничего в принципе невозможно; а в svn вполне можно продолжать вести разработку на своем компе и закоммитить когда все поднимется.

В-третьих, конкретно для нас — я не понимаю, как в полигоне делать книжку с разборами. [Мы на ННОИ традиционно выдаем книжку с подробными разборами, примерами программ и т.д., и у нас это все интегрировано в систему.]

В-четвертых, полигон невозможно автоматизировать. В svn я могу написать скрипт, который пройдется по всем условиям и прогонит их через ispell. Я могу написать скрипт, который выдаст статистику "сколько решений есть по какой задаче". В полигоне это невозможно.

В-пятых, в полигоне очень плохо версионируется участок "мой рабочий комп" — полигон. Точнее, он не версионируется никак. Я могу внести в полигоне прямо через редактор полигона какие-то изменения в решение, а потом внести другие изменения в файле решения, сохраненном у меня на на компе, залить этот файл в полигон — и тем самым затереть изменения, которые были в полигоне. Аналогично, я могу случайно скачать файл себе на комп и тем самым затереть те изменения, которые были на компе. Никакая система контроля версий такого не позволит никогда. У меня нет простого способа убедиться, что у меня на компе последняя версия задачи, кроме как скачав полностью package, — но package никак не подходит для разработки задачи. 

Может быть, я забыл что-то еще, но и это, на мой взгляд, достаточно серьезные недостатки.

Конечно, у полигона есть и достоинства. В первую очередь полигон удобнее для тех, кто первый раз в жизни делает задачи, да и вообще не имеет большого опыта разработки программных продуктов (т.е. не знает, что такое системы контроля версий, не хочет писать скрипты и т.п.) Как говорил в свое время Виталий Гольдштейн, "я могу взять десять школьных учителей, показать им куда что тыкать, и они создадут более-менее нормальные задачи". Это, безусловно, плюс, но, мне кажется, он не относится к нашей ситуации, все-таки у нас люди, которые имеют необходимый опыт.

Полигон также хорош тем, что позволяет проверять задачу и не позволяет чего-то забыть. Но наш daysper, например, делает фактически то же — только не проверяет неправильные решения, но это, имхо, уже мелочи. При этом я не настаиваю уж совсем на daysper, можно использовать t.sh/t.py от Олега Давыдова, или Makefile от Паши Кунявского и т.п.


В обсуждении у нас всплыла еще одна проблема — email-оповещения. ИМХО, при подготовке серьезного контеста высылать какую-либо конфиденциальную информацию на email — это очень небезопасно. У нас на почту высылались лишь сообщения вида "pkalinin has commited a changeset", а уж что именно там закоммичено — надо лезть в svn или в trac и там смотреть. Как мне объяснили, полигон высылает на почту очень подробные логи изменений. Это плохо; причем риск в первую очередь даже не в том, что какие-то умные школьники взломают мою почту, а в том, что я теперь должен намного внимательнее следить за своей почтой. Например, я на занятиях со школьниками залогиниваюсь в почту и иногда оставляю компьютер с открытым gmail без присмотра. Пока у меня там нет конфиденциальной информации, я не вижу в этом ничего плохого. Но если там будут материалы олимпиады, то школьник может специально, а еще более вероятно — случайно — что-то заметить.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +10 Проголосовать: не нравится

    Еще, кстати, подумал вот о каких проблемах (все, что написано выше и что я пишу ниже — это скорее мои предположения, у меня нет большого опыта работы в полигоне).

    Вот принято считать, что первые тесты должны быть тестами из условия. Но это осмысленно на олимпиадах, на которых участники могут получать фидбек в процессе тура (ACM, токены и т.п.) На классической школьной олимпиаде, когда тестирование происходит после тура, нет большого смысла ставить тесты из условия первыми (более того, это даже не стоит делать — зачем объяснять школьникам и их учителям, что вот эти тесты стоят ноль баллов, потому что это тесты из условия?). Но при этом надо иметь возможность сделать отдельный package по задаче, который будет включать только тесты из условия — чтобы тестировать на них во время тура. Это возможно сделать?

    Еще проблема. Подготовка олимпиады — это не только подготовка задач. Например, есть разные файлы, которые хочется версионировать, но которые не относятся к какой-либо конкретной задаче — например, памятка участника, инструкции для жюри, списки участников и т.д. Если у меня задачи лежат под свн или другой системой контроля версий, то я рядом делаю каталог, где храню все такие файлы. В полигон же такие файлы не поподают в принципе. Аналогично, например, надо иметь список рассылки для жюри, хорошо бы иметь какую-нибудь а-ля вики-систему для хранения текущей информации. Если задачи хранятся в свн, то есть много систем, позволяющих интегрировать и свн, и списки рассылки, и вики — например, trac. Если работать в полигоне, то появляются костыли типа табличек в гуглодоках.

    Наконец, третья проблема. Что произойдет, если по каким-то причинам в полигоне пропадут все данные? С Codeforces такое уже было, да и понятно, что 100% гарантии не даст ни один сервис. Но если я использую svn, то потеря данных на сервере мне не очень страшна — у меня останется рабочая копия, с которой можно прекрасно работать, которую я могу закоммитить на новый сервер, или на старый, если на нем восстановят работу. Пропадет только история, что не очень страшно. Если я использую распределенную систему контроля версий, то тем более потеря данных на сервере мне не страшна. В полигоне же если данные на сервере потеряются, то лучшее, что у меня останется — это скачанный package и всякие рабочие файлы, разбросанные по моему компу. Это никак не приспособлено для дальнейшей разработки задачи. Даже если полигон оперативно восстановят, я не смогу легко все это импортировать обратно, т.к. в полигоне нет никаких средств автоматического испорта задач, пусть даже своих собственных package'й. В результате, при потере данных в полигоне я буду вынужден потратить кучу времени чтобы восстановить возможность работы с задачами.

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Интересно, когда уже у кого нибудь (или у группы людей) сдадут нервы и они напишут свой "Полигон 2.0" с ...

  • »
    »
    9 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +10 Проголосовать: не нравится

    .

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +13 Проголосовать: не нравится

    Пробовали, да и продолжают пробовать, насколько я понимаю, но (по моему ощущению) не хватает энтузиазма. Я расскажу про то, как это выглядит с моей стороны.

    Я вот, например, в 2009-10 году пилил daysper (wiki, во многом устаревшая) (начинали мы с Олегом Бурундуком, но продолжал я в одиночку фактически). В принципе, система вполне себе рабочая, я ее неоднократно использовал в ЛКШ (Саша Тимин даже давал очень восторженные отзывы о ней), но других людей уговорить перейти на нее я не сумел, и разработка загнулась.

    В ЛКШ.Зима в 2010-11 (если не ошибаюсь) году собралась довольно представительная група людей и в который раз решили, что надо бы разработать систему с нуля. Выбрали название — please, обсудили основы "чего мы хотим", договорились работать... Где-то через несколько месяцев, обнаружив, что последние несколько десятков коммитов — только мои, без какого-либо фидбека и тем более участия от остальных разработчиков, я решил забить. Хотя система уже имела минимальный функционал для создавания задач.

    Please потом был реинкарнирован с нуля (осталось только название и язык программирования) в параллели П в ЛКШ, но в итоге тоже не обрел популярности.

    Это все, конечно, утилиты командной строки (у второго please потом еще был и web-интерфейс), но это и логично, если мы хотим сохранить работу в svn.

    Насколько я понимаю, разрабатывается и еще куча подобных систем (t.py от Олега Бурундука, Makefile от Паши Кунявского; наверное, мои сведения устарели), но все пилят свои системы вместо того, чтобы объединиться и сделать что-то общее.

    Мое личное мнение, что, конечно, стоило бы разработать единую систему командной строки, но это возможно делать только большой командой заинтересованных людей (и потому ничего из вышеперечисленных большого распространения не получило), а такой заинтересованности почему-то нет...

»
9 лет назад, # |
Rev. 6   Проголосовать: нравится +9 Проголосовать: не нравится

11 — Polygon is awesome!

I've been the ACM Arab regional contest chief judge for three years, and Polygon saved a lot of time and effort while preparing the problems.

Thanks a lot MikeMirzayanov!

»
9 лет назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Is there a tutorial about the API?? I couldn't manage to find it.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    I tried to find it once again, but I couldn't. What parameters should I give to the link? And, are there more APIs that I can use?

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Hi, I was wondering: is Polygon server sourcecode open? If not, why? I think that opensourcing it would be a huge boost to development.

»
8 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

Not sure this is the best place to write this, but I couldn't find a bug/issue tracker for Polygon.

How can I include testcases in the problem statement that contain '#', i.e. a sharp? When trying to generate a PDF file, the LaTeX process throws an error. In the statement itself I can escape it writing '\#' (while still rendering fine in HTML), but not in the testcase data.

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    you may want custom input/output for that

    • »
      »
      »
      8 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      I'm not sure I understand your suggestion. If you mean to add a testcase not generated by a script: I tried that, but generating the PDF still failed.

      I think this could be fixed by modifying the LaTeX templates: olymp.sty already provides a command \exmpfile instead of the \exmp used in the default problem.tex. That command uses a verbatim environment to include the testcase as file. However, I don't know what to replace ${test.input} with to reference the testcase file, instead of its contents.

      • »
        »
        »
        »
        8 лет назад, # ^ |
          Проголосовать: нравится +8 Проголосовать: не нравится

        I mean you may go to setting of specific test, there will be an option to use custom input/output.

»
8 лет назад, # |
  Проголосовать: нравится -26 Проголосовать: не нравится

Want another Christmas tree :3

»
8 лет назад, # |
  Проголосовать: нравится -50 Проголосовать: не нравится

want another Christmas tree :3

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

А есть ли возможность добавить в полигон готовую pdf-ку с условием?

»
7 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Только начал пользоваться Полигоном. Я создал несколько тестсетов,а как добавить их на кф не понятно(( решения тестируются только на стандартном наборе (tests). Скажите, пожалуйста, где и как можно "включить" остальные тестсеты?

Спасибо:)

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Добрый день. Никак, они нужны для других моделей тестирования. Просто добавьте все ваши тесты в тестсет tests.

    • »
      »
      »
      7 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      спасибо! я так и сделал, но надеялся на существование более изящного решения:)

»
7 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

У меня есть ряд вопросов по polygon. 1) Во вкладке Package я нажимаю "Create package", вижу вердикт "PackageException: Got exception while generating tests." Нельзя никак поподробнее узнать, какой конкретно exception и на каком конкретно тесте это произошло? Или надо вообще все тесты руками перебирать, думать, где может быть проблема?

2) Написал валидатор http://pastebin.com/bmyAgh0a Написал генератор тестов http://pastebin.com/HPP0dCGN Но когда во вкладке "Tests" я пишу скрипт <#list 1..30 as item> generator {item} >  </#list>

То добавляются тесты, которые не проходят ограничения, не соответствуют валидатору. Так разве должно быть? Я думал, тест генерится, потом проверяется валидатором, а только потом, если все хорошо, то добавляется. Видимо, это как-то по-другому делается. Расскажите, пожалуйста.

3) Не пойму, что с рандомом. Вот я пытался в генераторе проверять, что тест подходит под условия (см. пункт 2) http://pastebin.com/KrvVaUpA Почему-то размеры массивов A и B всегда в диапазоне 57-61 и никакие другие. Прямо вообще никогда маленькие числа рандом не возвращает. Как-то это очень подозрительно, как бы не баг. Или я не так обращаюсь к нему?

4) Как добавить сэмплы? Нигде не нашел. А то у меня в итоге получилось условие задачи совсем без примеров (я это увидел, когда добавил задачу в мэшап)

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится +12 Проголосовать: не нравится
    1. Нажми preview tests и увидишь, какие тесты сгенерились, а какие упали из-за валидатора.

    2. Работает именно так, как ты описал, т.е. тест добавляется в любом случае, а потом проверяется. Не надо генерировать некорректные тесты.

    3. Рандом надо инициализировать, по умолчанию он инициализируется аргументами командной строки, если запускать просто как gen.exe > test.txt то аргументы всегда будут одинаковые и результат всегда будет одинаковый. А когда генерируешь тест на полигоне, пишешь например "gen 10 > 1", "gen 100 > 2" — т.е. в первый раз запустится с аргументами "gen 10" и запишется в первый тест, а во второй раз с аргументами "gen 100" и запишется во второй тест, т.к. аргументы разные, рандом тоже будет разный.

    4. Напротив теста есть кнопка Edit, там есть галочка use in statements.

    • »
      »
      »
      7 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Спасибо dalex, pitfall, elena.

      С 1, 3, 4 все ясно. Не пойму только по 2 пункту. Вот ты пишешь "не надо генерировать некорректные тесты". Генератор должен выдавать только валидные тесты? То есть в коде генератора мне надо как бы использовать еще и валидатор сразу? Я могу тогда просто взять и засунуть в генератор целиком код валидатора в виде отдельной функции. И потом в бесконечном цикле генерировать тесты, пока не найду валидный. Это так что ли делается?

      • »
        »
        »
        »
        7 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        Нет, надо просто сразу генерить валидный тест, в чем проблема то?

        Т.е. если у тебя инпут — целое число от 1 до 1000, то пишешь не так:

        int n;
        while (true) {
          n = rnd.nextInt();
          if (1 <= n && n <= 1000) break;
        }
        

        а вот так:

        int n = rnd.nextInt(1, 1000);
        
        • »
          »
          »
          »
          »
          7 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Ну бывает же, что я не могу сразу строить, допустим, граф, который требуется по условию. Например, какой-нибудь граф, в котором ровно 3 цикла, только 2 из которых имеют общую вершину. Или еще сложнее какие-нибудь условия. Я не знаю, как построить такой тест. Но я могу сгенерить случайный и проверить его на правильность.

          • »
            »
            »
            »
            »
            »
            7 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            Задачи такие придумывать не надо.

          • »
            »
            »
            »
            »
            »
            7 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            (Могу что-то путать) Можно функцию проверки того, что граф удовлетворяет условию запихнуть в библиотеку, которую добавить в Files (тогда она будет видна и валидатору, и генератору, если в коде эту библиотек у подключить, конечно).

  • »
    »
    7 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    2) Валидатор используется в инвокейшенах, стрессах, при валидации пэкэджа

    3) Вы обращаетесь правильно, однако неправильно предполагаете, что размеры массивов будут маленькие. Рассмотрим битовое представление сгенерированного числа (будем генерировать числа от 1 до 2^61 для наглядности), а если точнее, то на старший разряд. В нем будет единичка с вероятностью 1/2, а если в нем единичка, то значит, что длина битового представления будет 61, вероятность что будет 60 — 1/4, вероятность, что 59 — 1/8, и тд. Просто вы ошибочно предположили, что длина битового представления чисел равновероятна.

    4) Нажмите напротив теста edit, и на страничке редактирования нажмите галочку Use in statements

»
5 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Polygon can be tricky at first glance but after some testing it is surprisingly simple and helpful. All I needed was just an afternoon and a cup of coffee to get a grasp on it.

I hope the platform gets more recognitions in the future.