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

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

На днях на сайте Quora меня попросили ответить на вопрос "What is it like to be a problem writer for programming competitions?". Первым пришел в голову ответ из одного слова, потом подтянулся более развернутый, потом вспомнилась очень характерная история, хм, и еще об этом нужно бы упомянуть... На второй странице я поняла, что это уже не ответ, а полноценная статья, а на третьей — решила поделиться этим шедевром с подготовленной аудиторией, то есть с вами.

Итак, каково же это — писать задачи для соревнований по программированию?

Если одним словом (да-да, тем самым, которое первая мысль), то "здорово". Если чуть подробнее, то "тяжелое, иногда неблагодарное, но все равно увлекательное занятие". Если еще подробнее... Прежде всего, придумывать задачи интереснее, чем решать чужие — иначе задачи для турниров, да и для обычных раундов придумывали бы только организаторы :-) Автор важнее для качества (а иногда и для самой возможности проведения) соревнования, чем каждый отдельно взятый участник, уступая в этом только организаторам. Буду ли я участвовать в одном отдельно взятом матче и сколько задач я там решу — важно одной мне, от силы паре-тройке болельщиков. А вот в ULR по какому-нибудь нереальному языку или первом раунде марафонов в TCO могут быть уже сотни пострадавших :-)

Затем, обычно придуманный и проведенный матч — это не только материальное вознаграждение (по слухам, есть люди, которые пишут задачи и вовсе бесплатно; не знаю, не пробовала), а и целый набор положительных эмоций:

  • гордость за то, что твои задачи (а заодно и тебя) сочли достойными появления в соревновании. Чем строже отбор и чем моложе и неопытнее автор, тем это чувство сильнее. До сих пор помню мое самое первое райтерское письмо — одной строчки "Ok, HS SRM 34 is yours" хватило, чтобы выдернуть меня из пучин чернейшей тоски и вознести на вершины абсолютного счастья, и еще несколько дней я ходила вприпрыжку и чуть ли не взлетая :-) Сейчас, конечно, эффект новизны пропал, и переписка по поводу того, какой раунд достается мне и достается ли вообще, стала рутинным элементом, но на первые пару лет его хватило.
  • радость творения. Когда меня спрашивают, что хорошего в работе программиста, один из самых ярких моментов, которые я вспоминаю, — визуализатор к марафону BounceOff; часы, проведенные в неудачных попытках заставить шарик прыгать так, как надо, десятки вариантов траекторий, иногда совершенно дикие, и вдруг вот она — идеальная траектория, точно как задумано! Правда, потом этот фрагмент визуализатора переписали полностью, но миг, озаренный чистой, ничем не замутненной радостью созидания, остался.
  • удовлетворение от хорошо проделанной работы, в частности от чтения хвалебных комментариев в духе "автор молодец, пиши еще". Ценнее всего похвала админская — и за счет перспектив, открывающихся в следующих матчах, и за счет ее (сравнительной) редкости. Лучшее, что я когда-либо слышала по этому поводу — это "Да, действительно отличная задача получилась" о PolygonArea, ключевой задаче в моей райтерской карьере.
  • изумительное чувство свободы, которое испытываешь после того, как результаты раунда объявлены официальными, — все! Никаких правок в последнюю минуту, никаких внезапно обнаружившихся неучтенных случаев, никто не почелленджил эталонное решение, все отлично. Ну, иногда с этим не складывается, но об этом позже.
  • затаенное (для приличия) злорадство по поводу хитрого граничного случая, спрятанного в простой на вид задаче. Есть грех, люблю это дело. Чего стоит одна только AgeEncoding, в которой все особые случаи заметило меньше 10% людей!

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

Кроме рутины, на этой стороне живут еще ситуации, которые кроме как факапами не назовешь — неправильные эталонные решения, недостающие тесты и все в таком роде. Технические обломы контестов сюда не относятся (мало кто винит в них авторов задач), но и без этого случаев хватает. В первом же моей марафоне DeepMining был баг — поле, по которому двигался робот, генерировалось по-разному в зависимости от того, в каком порядке робот его обходил — и выяснилось это только после конца матча. На тот момент я пользовалась Java что-то около двух месяцев и еще не успела узнать, что установка setSeed генератора случайных чисел не задает его состояние однозначно. В задаче TrianglesBoard я забыла о том, что в Арене в тесты нельзя вводить строки длиннее 50 символов (в MPSQAS можно), и задала ограничения на размер тестов "от 1 до 50 строк, длина каждой строки равна 2*ее номер" — в результате челленджить (и тестировать свое решение) можно было не на всех тестах. В этом плане мне больше всего нравятся марафоны — за неделю-две можно исправить любой баг, не доводя ситуацию до критической. Многие баги, которые просто убили бы СРМ, в марафонах становятся просто очередной байкой, как моя любимая новогодняя история — ну, я ее уже рассказывала, я всегда рассказываю ее под Новый Год, ну, или когда речь заходит о райтерстве :-)

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

  • в задаче SubwayTrip фигурировал эскалатор; житель одной гордой страны указал на то, что в этой стране это понятие не знакомо, поэтому все представители этой страны эту задачу не осилили.
  • автор не знает математики; ведь если бы автор знал математику, он излагал бы задачу не малопонятным двусмысленным текстом, а четкими математическими формулами! Кстати, русского языка автор тоже не знает, примерно из тех же соображений.

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

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

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

А когда ты придумываешь задачу, то с чего ты начинаешь? Берешь ли ты конкретный алгоритм(конкретное решение), и потом добавляешь "фишечек" в задачу чтобы она была полноценной, придумывая легенду и прочее? Или берешь какую-то реальную(или нереальную) ситуацию и (возможно) отсекаешь из нее какие-то случаи чтобы задача была не NP? В общем, можешь рассказать про процесс придумывания задач?

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

    Сначала я придумываю задачу, а потом задумываюсь о том, как же мне ее решать. Получается не всегда — размер файла с хорошими идеями, решения к которым я не знаю, растет монотонно :-) Поэтому, кстати, мне не очень нравится модель написания задач на ТопКодере — нужно сначала знать, как задача решается, а только потом дают раунд и тестеров, и минимум соавторства.

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

      Спасибо! Вообще хотелось бы чтобы и другие авторы "поделились"

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

    Обычно получается так, что если задачи придумываются в спокойном виде — то берётся реальная ситуация, а потом уже думается, как решать то, что получилось. А вот если нужно придумать задачу на контест, который через пару дней, а задач в нём не хватает — то очень часто задачи придумываются "от решения" — мол "а давайте дадим задачу на строки".

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

Что то я не очень понял. "по слухам, есть люди, которые пишут задачи и вовсе бесплатно; не знаю, не пробовала" "Я бы хотел провести раунд Codeforces по своим задачам. Что для этого надо сделать? Положено ли вознаграждение авторам? Хотите провести раунд? Отлично! Мы очень рады! Координатор задач проекта Артем Рахов (aka RAD) будет рад помочь вам подготовить задачи. Связаться с Артемом можно, оставив ему личное сообщение, или по электронной почте . У нас есть отличная технологическая база для подготовки задач, а опыт создания соревнований доставит вам удовольствие и окажется полезным." Так платят авторам задач на CF или нет?

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

    Не забывайте, что помимо КФ есть еще куча различных контестеров:)

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

      Не забывайте, задачи можно предложить безвозмездно и CodeForce-у! =)

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

    Являясь некоммерческим проектом, Codeforces не может предложить вам золотые горы. Мы надеемся, что помощь проекту, который объединил столь широкую аудиторию и прикладывает значительные усилия к развитию спортивного программирования, может служить достаточным мотивом.

    Мы готовы выплачивать поощрения авторам по следующей схеме:

    подготовка Div 1 раунда — 7500 российских рублей;
    подготовка сдвоенного Div 1 + Div 2 раунда — 9000 российских рублей.

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

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

      Совсем неплохо, рад за авторов) А кто спонсирует CF, или как CF зарабатывает?

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

        Кто спонсирует Codeforces? Лучший вопрос за сегодня, я считаю.

        Прокрутите страницу до самого верха и обратите внимание на левый верхний угол ;)

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

      Кстати, целесообразно было бы добавить эту информацию в ЧАВО.

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

    Мне непонятно, почему меня заминусили. Я всего лишь задал вопрос, причём не глупый.

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

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

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

по слухам, есть люди, которые пишут задачи и вовсе бесплатно; не знаю, не пробовала

Лично я много задач готовила бесплатно: городские олимпиады школьников, региональный этап ВКОШП, контесты в Петрозаводск, Четвертьфинал. (В последний год это все оплачивалось, но вообще источники финансирования нестабильные). По-видимому, это все отличается от того, о чем пишет Nickolas, еще в и том, что подобные соревнования готовятся авторским коллективом. В студенческие годы это было интересно, потому что возможность проявить себя в новом качестве. Полезно оказаться по другую сторону баррикады. Например, самостоятельное составление тестов к задачам учит видеть логику в тестах жюри и всесторонне тестировать свои решения на контесте. Для ветеранов же подготовка контеста — это повод собраться вместе, в том числе в неформальной обстановке.

Так что материальная составляющая здесь, имхо, далеко не самое важное. Хотя, конечно, лучше, чтобы она была и побольше :)

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

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

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

    по слухам, есть люди, которые пишут задачи и вовсе бесплатно; не знаю, не пробовала
    Мне это предложение тоже очень не понравилось. Я не предвзят к автору, я даже сейчас попрошу прощения за "лучи добра" в её сторону относительно задачи С последнего её раунда на КФ (для которой так и не последовало разбора, BTW), если неточность формулировки и имела место быть, в чем многие сомневаются, то проблема не автора, а вычитывальщиков условий, и тестеров комплекта. Тем не менее я сейчас пошлю ещё один лучик, в её сторону, уж прости меня Nickolas. Поправь меня пожалуйста, если ошибаюсь, в ответном сообщении, и можно матом. Но насколько мне известно, ваша "карьера" как проблем-сеттера началась с топкодера, и мне думается, не из-за высокого рейтинга там, либо удачных-всемирноизвестных контестов вами подготовленных на других площадках, а по знакомству. Среди моих знакомых есть люди с много более высоким рейтингом, так и не увидевшие ответа на свои заявления о райтерстве, либо предложенные задачи на TC. Между тем, это не умаляет ваших заслуг, как автор вы состоялись, и довольно успешно, это неоспоримый факт. Но такие заявления нужно делать осторожнее, дабы не обидеть кого так, как я мог обидеть вас в данном сообщении.

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

      Между прочим, Nickolas никого и не пыталась оскорбить в своем посте. По-моему оскорбляться вообще не на что. А вот вы только что себя повели грубо, несмотря на все слова которые вы заранее сказали и извинения которые заранее принесли.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +30 Проголосовать: не нравится
      Среди моих знакомых есть люди с много более высоким рейтингом, так и не увидевшие ответа на свои заявления о райтерстве, либо предложенные задачи на TC.
      

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

      • »
        »
        »
        »
        12 лет назад, # ^ |
        Rev. 4   Проголосовать: нравится -21 Проголосовать: не нравится

        И о чем может говорить ваш комментарий?
        1) Вы имеете отношение к тому, что упомянуто в моем посте, т.е. это не мои выдумки.
        2) На данный момент, хороших авторов не хватает. Что не противоречит тому, что n-лет назад хороших авторов игнорировали. Гипотетически, нехватка авторов сейчас, может быть отчасти обусловлена игнорированием авторов в прошлом.
        3) Я нагло вру.
        Поскольку авторитетно подтвердить или опровергнуть вышесказанное не предстваляется мне возможным, предлагаю читателю определиться с выводами самостоятельно.

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

          Я, честно говоря, надеялся на конструктив, а не на обсуждение того, кто врет, а кто нет, и всяких других возможных следствий.

          Давайте попробуем снова. Никто никого не обвиняет во вранье. Никто никого специально не игнорирует. Никакие связи Марии (Nickolas) не играли роли в том, что ее задачи взяли (это домыслы). Хороших авторов не хватает всегда. Если n лет назад поставить ту планку качества, которую хотелось бы в идеале иметь сейчас, их бы не хватало еще больше.

          Теперь повторю просьбу: если Ваши знакомые заинтересованы в том, чтобы писать задачи для TC, я был бы очень рад, если бы Вы дали мне их контакты.

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

      Я недавно тут познакомился с логикой, и вот что она мне сказала:

      • Не автору задач и не положено разбирать задачи. (см. разбор — задача С другого автора)
      • Какая кому разница, как автор начал давать задачи, если задачи хороши? И при чем тут неуспехи ваших знакомых? И связь между длино^W высотой рейтинга и качеством задач с каких пор стала линейной?
      • Наконец, что обидного во фразе "Я никогда не пробовала давать задачи бесплатно"?

      P.S. Я тоже никогда не давал бесплатных задач, но на это лето, по всей видимости, буду придумывать бесплатные для Петрозаводска. Никакого когнитивного диссонанса не ощущается. Ценить свое время — нормально, по-моему.

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

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

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

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

Inspiring. I would add one more reason from a participant's perspective: problem writers win respect from the community.

I suggest you post this article on TopCoder forum too.

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

I like problems you have made because they are appropriately difficult for me. Thanks a lot and please keep challenging to create as many interesting problems as you can.

From a fan.

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

"автор молодец, пиши еще"! Спасибо, с удовольствием прочитал!

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

Я, пожалуй, воспользуюсь моментом и пошлю, хоть и с огромным опозданием, лучей добра автору за ту самую задачу BounceOff.

Тот марафон определенно стал для меня самым ярким событием за всю мою олимпиадную деятельность.

Спасибо.

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

I am very interested in the creating new tasks for the all programmists in the world!!! But it's very DIFFICULT for me and I think for the others also)))

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

One of the best blog post on codeforces. Thanks for the inspiration and insight.

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

Here is the original Quora thread she is talking about :)