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

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

Сегодня — очень знаменательный день. Конечно, все в курсе, что 50 лет назад Юрий Гагарин ознаменовал прорыв советской науки и техники — 12 апреля 1961 г. был совершен первый полет человека в космос. Так случилось, что колледж, где Гагарин учился несколько лет, находится практически по дороге от моего дома до университета. Я частенько прохожу мимо. На здании мемориальная доска, у дверей установлен бюст первого космонавта. Я иду мимо и смотрю на Гагарина. Он смотрит на меня.

12 апреля родилась Андреева Наталья Львовна. Если кто не знает — центр олимпиадной подготовки программистов Саратовского государственного университета носит имя Натальи Львовны. Если вас кто-то спросит, кто внес наибольший вклад в саратовскую школу спортивного программирования, то не стоит называть имена Чемпионов Мира, Европы или России. Правильный ответ — Наталья Львовна Андреева. Именно она вложила силы, энергию, показала пример энтузиазма и много лет развивала движение олимпиад по информатике в Саратове. Мне кажется какой-то вселенской несправедливостью, что ее сейчас нет с нами.

И это еще не все. 12 апреля — день рождения моего хорошего друга, капитана команды Saratov SU#3 (2000-2003), Эльтермана Ильи. То, что сейчас принято называть спортивным программированием, подарило нам не только интересное занятие и способ саморазвития, но и много хороших моментов, которые просто приятно вспомнить. Кто хорошо работает, тот хорошо и отдыхает. Работали мы хорошо. Команда в составе Эльтерман, Лазарев, Мирзаянов неоднократно побеждала на четвертьфинале, занимала второе и третье места на полуфинале и дважды стала серебряным призером чемпионата мира. Да, и еще титул чемпионов Европы 2002-го года тоже наш. Два раза подряд мы побеждали на забавном соревновании IPSC. Короче, мы тогда многого добились. Надеюсь, новые достижения еще впереди. Недавно, будучи в гостях четы Эльтерманов, познакомился с младшим членом семьи. Льву всего несколько месяцев, но он так понимающе на меня смотрел : В общем, жизнь рвется вперед — с днем рождения, капитан!

И, как говорится, last but not least. 12 апреля 2006 года на юбилейном 30-ом финале чемпионата мира по программированию команда Saratov SU#2 под аплодисменты поднялась на сцену и из рук Билла Пучера приняла кубок Чемпионов Мира. Мы — победили. Роман Алексеенков, Иван Романов и Игорь Кулькин. Саратовский университет стал третьим ВУЗом России (после СПбГУ и ИТМО), кто побеждал на финалах. Могу сказать, что эта команда — этакий пример acm-овской мечты. Они долго тренировались, не все шло гладко, но команда боролась до последнего. Уже после, казалось бы, не слишком удачного окончания олимпиадной карьеры, в августе месяце 2005-го я выясняю, что правила чемпионата изменены так, что они могут еще один сезон участвовать. Они не раздумывая соглашаются участвовать и после полугодового перерыва приступают к тренировкам. Happy end вам известен. Я думаю, про это можно снять фильм.

Такие вот мысли посещают меня 12-го апреля. Этот день для меня какой-то особенно саратовский. Именно его я считаю своим днем Саратова.

Фото на память:

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
На официальном сайте пока тихо: нет никакой информации о прошедшем туре. Конечно, организаторы могли бы организовать трансляцию текущих результатов для болельщиков. Не было. Как передают участники из Казани:
  • 1 место: Нижний Новгород;
  • 2 место: СпбГУ ИТМО;
  • 3 место: Саратов ГУ1;
  • 4 место: СпбГУ;
  • 5 место Саратов ГУ2.
Поздравляю победителей. Интересно будет ознакомиться с впечатлениями участников о чемпионате.

Полный текст и комментарии »

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

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

Прием решений участников завершен. Спасибо за участие. В скором времени мы проведем финальное тестирование и подведен результаты.

Всем доброго дня.

Все что написано ниже не первоапрельская шутка, но тоже мероприятие веселое :) Мы рады анонсировать новое экспериментальное соревнование на Codeforces — "Парсер контест: разбор архива задачи".

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

За свою жизнь я подготовил и провел огромное количество тренировок по прошедшим соревнованиям. Зачастую, это довольно однообразное занятие — часто к каждой задаче надо писать какие-то скрипты, которые переименовывают входные/выходные файлы задачи в стандартный вид. В архивах они называются совсем по-разному: может это river.in.1, river.out.1, river.in.2, river.out.2 и т.д. В другой задаче это может быть tests/1.dat, tests/1.ans, tests/2.dat, tests/2.ans и т.п.

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

Полный текст и комментарии »

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

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

Необычный турнир Manthan 2011 показал слабые стороны текущих формул подсчета рейтинга. После подведения результатов у победителя соревнования touristа предполагаемое изменение рейтинга оказалось равно "-1" :)

Такое возникло по причине приведения вычисленных изменений по сумме к 0. То есть Геннадий был в некотором плюсе до таких изменений, но так как сумма всех изменений не сошлась в 0 (оказалась положительной), то из всех рейтингов было немного вычтено. В качестве quick dirty hack в том раунде я отключил приведение суммы к 0, что привело к некоторой единовременной инфляции. Еще небольшой ляп: мной было замечено, что участники второго дивизиона за хорошее выступление получают слишком много баллов.

Полный текст и комментарии »

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

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

Сегодня ночью мне не спалось, а значит — работалось. Я перечитал свой старый пост "Вклад 2.0" и решил кое-что реализовать. Учтя комментарий, что каждый (несмотря ни на цвет, ни на позицию по вкладу) имеет право выразить свое мнение в виде плюса или минуса, я не стал ограничивать пользователей в возможности ставить оценки.

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

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

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

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

Желаю высокого вклада
MikeMirzayanov

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Проанализировав результаты и характер задач соревнований второго дивизиона, мы приняли решение расширить его, включив в него "синих" участников. Таким образом, второй дивизион будет состоять из участников с рейтингом от 0 до 1649. 

В первую очередь это обусловлено тем, что я считаю задачи второго дивизиона интересными и полезными для "синих" участников. На таких соревнованиях мы зачастую даем учебные  задачи на распространенные темы спортивного программирования. Уверен, что участники их уверенно решающие, имеют рейтинг скорее желтый, чем синий. Кроме того, замечено, что для того, чтобы быть синим достаточно решать всего 1-2 задачи на соревнованиях первого дивизиона. Это приводит к тому, что такие участники не получают должного развития, так как они не имеют стимула учиться решать несложные задачи, но их знаний хватает для того, чтобы оставаться синим или даже стать желтым.

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

UPD: Желтая группа разделена на фиолетовый и оранжевый цвета. Забавно, что фиолетовый как раз и является смесью синего с красным, а оранжевый это почти красный :) В ближайшее время возможны еще некоторые пересмотры, война покажет. Завтра обновлю графики.

Высокого вам рейтинга,
MikeMirzayanov

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-английски

We are delighted to inform you that Codeforces has collaborated with CodeFest'11, the annual international online coding festival of Computer Engineering Society, IT-BHU. CodeFest is a unique fest wherein concepts of mathematics, logic, artificial intelligence, algorithms, language syntax, etc. are required to be deployed in programming; these concepts manifest themselves in solving problems effectively and efficiently!

Codeforces is the programming partner of CodeFest'11. In fact, Manthan:, which is the algorithm intensive programming contest being organised by CodeFest will be hosted on Codeforces.

Here is a brief description of the constituent ongoing and upcoming online events: Visit website for more details.

More than 2500 programmers from 59 countries have already registered for CodeFest'11. Come and be a part of the biggest coding extravaganza in Asia.

Feel free to contact us at codefest@itbhu.ac.in or reach us personally at:

  • Mohit Bansal mohit.bansal.cse06@itbhu.ac.in (+91-930-505-3020)
  • Saket Saurabh saket.saurabh.cse07@itbhu.ac.in (+91-945-282-5690)
We wish you all the best for CodeFest'11 and for your future endeavours.

Be free and Happy coding,
CodeFest and Codeforces team

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
На этот раз "порадовал" Facebook. Интересно, моя мама смогла бы восстановить пароль?
 
Пишите в комментариях этого поста, если на Codeforces что-то не переведено или переведено криво.

UPD. Туда же несогласования времен и падежей. Опять пример из Facebook: "Учился в Саратовский Государственный Университет. Женат. Из г. Саратов, Саратовская обл. День рождения: 21 Январь 1981 г.". По мне надо так: "Учился в Саратовском Государственном Университете. Женат. Из г. Саратова, Саратовской обл. День рождения: 21 Января 1981 г.". Хотя здесь я понимаю, что все сложнее для реализации. Они же большое количество языков поддерживают. И еще не уверен как лучше "из города Саратов" или "из города Саратова" (странно как-то два слова подряд склонять).

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Это список Часто задаваемых Вопросов и Ответов, относящихся к работе Codeforces.
  1. Что такое Codeforces? Что это за сайт/ресурс?
  2. Что надо сделать для участия в соревновании? Нужна ли предварительная регистрация?
  3. По каким правилам проводятся соревнования?
  4. На каких языках здесь можно решать задачи? Есть примеры решений?
  5. Я бы хотел провести раунд Codeforces по своим задачам. Что для этого надо сделать? Положено ли вознаграждение авторам?
  6. Какие еще существуют правила на Codeforces?
  7. Какие технические детали полезно знать о тестирующей системе Codeforces?
  8. Что такое рейтинг, дивизионы?
  9. Что такое вклад?
  10. С какими постами в блогах полезно ознакомиться?
  11. Я заметил, что на сайте публикуются решения всех участников и тесты с прошедших соревнований. Каким образом разрешено их использовать?

Вопросы и ответы:

  1. Что такое Codeforces? Что это за сайт/ресурс?
    Codeforces — проект, объединяющий людей, которые интересуются и участвуют в соревнованиях по программированию. С одной стороны Codeforces является социальной сетью, посвященной программированию и соревнованиям по программированию. С другой стороны — это площадка, где регулярно проводятся соревнования, навыки участников отражает рейтинг, а прошедшие соревнования могут быть использованы для подготовки. Codeforces постоянно развивается, и в наших планах усовершенствование платформы для предоставления возможностей проводить контесты участникам самостоятельно, наполнение проекта учебным контентом, развитие Codeforces как тренировочной и учебной платформы.
  2. Что надо сделать для участия в соревновании? Нужна ли предварительная регистрация?
    На Codeforces регулярно проводятся соревнования, участие в которых бесплатно и открыто для всех. Каждый месяц мы проводим ориентировочно шесть соревнований. Для участия вам необходимо зарегистрироваться на сайте (если у вас есть OpenID или Gmail-аккаунт, то не придется даже запоминать пароль), и зарегистрироваться на предстоящее соревнование. Убедитесь, что вы присутствуете в списке зарегистрированных на контест до окончания регистрации. Обычно, если вы не можете принять участие в соревновании официально (например, это соревнование для второго дивизиона, а вы в первом), то можно зарегистрироваться на соревнование для участия вне конкурса.
  3. По каким правилам проводятся соревнования?
    Обычно, они проходят по специальным правилам Codeforces. Если оговорено особо, то могут быть использованы правила международных студенческих соревнований по программированию ACM-ICPC или какие-либо другие модификации. Если коротко, то на соревнованиях по правилам Codeforces вы пишите решения задач, которые во время соревнования тестируются только на небольшом наборе тестов. Прошедшие этот набор тестов решения, их авторы могут блокировать (отказаться от перепосылки решения по этой задаче в будущем, даже в случае обнаружения у себя ошибки). Такие авторы получают возможность просматривать исходники других участников, искать в них ошибки и предлагать тесты, на которых эти решения не работают. Таким образом, можно взломать чужое решение, заработав на этом баллы. После соревнования, все решения, которые прошли претесты и не были взломаны, тестируются на финальном наборе тестов. Задачи дешевеют во время соревнования (чем сдал быстрее, тем больше баллов), неудачные взломы снимают баллы, а успешные — добавляют. Ознакомьтесь с подробной версией правил перед участием.
  4. На каких языках здесь можно решать задачи? Есть примеры решений?
  5. Я бы хотел провести раунд Codeforces по своим задачам. Что для этого надо сделать? Положено ли вознаграждение авторам?
    Хотите провести раунд? Отлично! Мы очень рады! Пожалуйста, прочтите пост и следуйте инструкциям из него.
  6. Какие еще существуют правила на Codeforces?
    Мы не имеем четкого Великого-Свода-Правил-Поведения-На-Codeforces. Однако, разумеется, здесь надо вести себя в соответствии с традиционными требованиями поведения в общественных местах и тематических сообществах. Следующие пункты, конечно, необходимо соблюдать:
    • Не создавайте более одного аккаунта, если вы забыли пароль, то воспользуйтесь системой напоминания пароля.
    • Не используйте грубый, оскорбительный или вводящий в заблуждение хэндл.
    • Не используйте чужое фото в профиле, это некрасиво и вводит в заблуждение членов сообщества.
    • Не грубите, не оскорбляйте других участников и представителей администрации, старайтесь быть вежливым, чтобы с вами было приятно общаться.
    • Участвуя в личных соревнованиях, не общайтесь на тему задач с другими участниками, не используйте чужой код для вставки его в свои решения. Если соревнование командное — обсуждайте задачи только с членами команды.
    • Не пытайтесь дестабилизировать работу как сайта, так и проверяющей системы. Ваши программы должны взаимодействовать только с консолью (для задач со стандартным вводом-выводом) или файлами входных и выходных данных.
    • Не публикуйте, не распространяйте свои решения и идеи решений во время соревнования.
  7. Какие технические детали полезно знать о тестирующей системе Codeforces?
    Система Codeforces напоминает классические Online Judges. Решения тестируются на заранее приготовленных тестах (или взломах, предложенных другими участниками). В результате вы получаете вердикты, смысл которых понятен из названия. Отдельно стоит отметить, что на Codeforces нет вердикта "Ошибка представления данных" (Presentation Error), подобная ситуация трактуется как "Неправильный ответ" (Wrong Answer). Все сомнительные вердикты ("Ошибка тестирования" и др.) не учитываются при подведении результатов, равно как и решения, упавшие на тесте 1 (в задачах, где более одного теста).
  8. Что такое рейтинг, дивизионы?
    Участвуя в соревнованиях на Codeforces, участники увеличивают (или уменьшают) свой рейтинг, который отражает их умение решать задачи. Рейтинг является модификацией рейтинга Эло, некоторые детали можно прочитать в более подробном изложении. В соответствии с рейтингом, участники делятся на два дивизиона: второй (послабее, любители) и первый (посильнее, профессионалы). Участники, не принимающие участвующие в соревнованиях, и те, чей рейтинг менее 1900, относятся ко второму дивизиону. Рейтинг 1900+ обозначает участие в первом дивизионе. Обычно на Codeforces проводятся два вида соревнований: для участников второго дивизиона (участники первого могут принимать участие в них вне конкурса) и для обоих дивизионов. Первый вид соревнований содержит более простые и учебные задачи.
  9. Что такое вклад?
    Голоса за посты и комментарии пользователя изменяют его вклад. Вклад призван отображать полезность участника сообщества. Система подсчета вклада несовершенна, в будущем правила ее подсчета будут изменены.
  10. С какими постами в блогах полезно ознакомиться?
  11. Я заметил, что на сайте публикуются решения всех участников и тесты с прошедших соревнований. Каким образом разрешено их использовать?
    В самом деле, мы публикуем материалы с прошедших соревнований и они могут быть использованы, например, для индивидуальных занятий. Использование материалов на других Online Judges, публичных соревнованиях и т.п. запрещено. Обязательно прочтите лицензию, перед использованием материалов.
    Для того, чтобы просмотреть свое или чужое решение, достаточно кликнуть на его идентификатор на странице "Статус". Во всплывающем окне вместе с исходным кодом, будет находиться протокол тестирования, содержащий все тесты. Со страницы со списком задач можно перейти на список правильных решений по заданной задачи. Внизу страниц "Статус" (и других со списками решений) есть возможность сортировки решений по различным критериям.

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Всем привет!

Скоро состоится (в понедельник, 21-го февраля) первый экспериментальный Unknown Language Round #1. Это будет обычный нерейтинговый контест по правилам ACM-ICPC. Единственная особенность - задачи во время этого раунда можно будет сдавать только на одном, не очень популярном языке. Каком? Секрет!

MikeMirzayanov

UPD: Анонс языка сегодняшнего контеста состоится примерно за пять минут до его начала. Всем удачи!

Язык программирования сегодняшнего контеста это - Tcl. Tcl (от англ. Tool Command Language - "командный язык инструментов", читается "тикль" или "ти-си-эль") - скриптовый язык высокого уровня (из статьи в Википедии). Вот пример программы, которая читает и выводит одно целое число:
 set line [gets stdin]<br> scan $line "%d" n<br> puts $n 
Во время контеста можно пользоваться вкладкой "запуск" в интерфейсе контеста.

UPD: Соревнование закончено: ссылка на результаты. Вам понравилось?

Полный текст и комментарии »

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

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

Библиотека testlib.h

Здесь пойдет речь о библиотеке testlib.h, которая была написана мной достаточно давно — году в 2005-ом. Незадолго до этого было объявлено об отказе на финале ACM-ICPC от использования Pascal, популярность набирал TopCoder (где так же нет Pascal/Delphi). Все это приводило к мыслям, что писать чекеры на Pascal вечно невозможно, да и не всегда достаточно удобно, да и кроссплатформенным этот вариант назвать трудно — по-моему далеко не все testlib.pas (которых несколько разновидностей) компилируются free pascal.

Про чекеры

Так как не все читатели являются авторами задач, то давайте проясним смысл этого слова. Чекером называется программа, которая читает входной файл (тест), вывод проверяемой программы, предполагаемый ответ и выводит вердикт относительно корректности вывода проверяемой программы. Обычно, бывают следующие вердикты: OK (ответ верен, представлен один из правильных ответов), WA (ответ неверен), PE (формат вывода не верен, я этот вердикт не люблю), FL (произошел epic fail — например, чекер выяснил, что решение участника вывело более оптимальный ответ, чем авторское решение). Конечно, при тестировании подготовленных задач не должен появляться FL, но о нем мы расскажем чуть позже.

Конечно, в большинстве задач не требуется "интеллектуальный" чекер, так как условие задачи однозначно определяет вывод участника. Более того, на многих соревнованиях по техническим причинам (TopCoder) или в силу традиций (большое количество ACM-ICPC regionals) это стало правилом. С другой стороны, даже при однозначном выводе могут быть тонкости — на сколько позволять участникам не соблюдать формат. Возможны следующие моменты (и не только они):

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Вот, что пришло сегодня на мой адрес электронной почты:

Dear Participant,

The 2011 World Finals is postponed.

Contact your travel agent or airline for a refund or travel voucher. Consular Travel Warnings should make it easier for you to avoid penalties.

The earliest date will be the last week of May. Please block the last week of May on your calendar.

Please block the last week of June on your calendar. The month of July and the first two weeks of August are also under consideration.

We hope to announce the date by February 10th. We plan to announce both the place and date by February 28th.

I look forward to seeing every one at a spectacular World Finals later this year.

Bill

Полный текст и комментарии »

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

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

Всем привет!

Этот контест был подготовлен в срочном порядке Артемом Раховым и другими участниками сборов в Петрозаводске от Саратовского ГУ. Пришлось оторваться от дорешивания, не пойти на лекцию Виталия Гольдштейна (не сердись, Виталий), но зато раунд подготовлен и мы ждем вас — участников.

Как говорится, "happy hacking"
MikeMirzayanov и команда Codeforces

UPD. Контест закончен, всем спасибо за участие. Победил участник из Китая winmad. Лучший участник вне конкурса: anonymous. Последняя задача контеста поддалась только ему, браво!

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

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

Закончился 2010 год, и, конечно, все уже готовы не только встретить Старый Новый Год, но и узнать имена тех, кто награжден медалями Кормена за 2010 г.

Итак, в номинации "Лучший участник-школьник 2010" награжден ... барабанная дробь ... Геннадий Короткевич. Приняв участие в 5-ти из 6-ти олимпиад ЗКШ, проводимых проектом Codeforces, Геннадий одержал победу в каждом из них! В командном зачете он принимал участие индивидуально, но это не помешало ему обойти всех претендентов на победу.

В номинации "Лучший участник 2010" медаль Кормена достается ... Геннадию Короткевичу! За прошедший год Геннадий принял участие в 15-ти раундах Codeforces из них 5 побед, а в 9-ти раундах он вошел в пятерку лидеров. Феноменальный успех усиливается тем фактом, что Геннадий учится в 10 классе. Браво, tourist! Мы желаем Геннадию новых побед и достижений!

В номинации "Лучший автор задач 2010" награждается Наталья Бондаренко. Ярко закончив в этом году карьеру участника ACM ICPC (напоминаю: золотая и серебряная медали финала, победа на NEERC 2008), Наталья учится в аспирантуре Саратовского ГУ и активно помогает Codeforces проводить раунды, подготавливая интересные задачи. На ее счету участие в подготовке 5-ти соревнований, полная разработка 19-ти задач и участие в подготовке еще большего числа. Спасибо, natalia. Мы с радостью отдаем тебе победу в этой номинации и надеемся на дальнейшую плодотворную работу.

Спасибо всем тем, кто проявил интерес к проекту в прошедшем году. Мы очень рады, что наши соревнования находят своих участников, и вы делитесь впечатлениями и общаетесь на страницах Codeforces.

Полный текст и комментарии »

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

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

Всем привет!

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

В настоящий момент, когда сообщество выросло и немного окрепло вклад стали видны его слабые места и проблемы. Значит, самое время исправить ситуацию.

Поразмыслив над ситуацией, почитав мнения сообщества, я думаю, что разумно будет поступить следующим образом.

  1. Вклад, как явление, надо оставить, но модифицировать способы его подсчета.
  2. Делать каких-то больших вложений в усложнение системы мне не хочется - есть большое количество других направлений, которые более ценны и востребованы.
  3. Не хочется делать систему излишне управляемой некоторой диктаторской волей и т.п. Я против введения модераторов, способный решать все и вся. С другой стороны предоставлять повышенные права к управлению сообществом авторитетным пользователям - логичный и правильный шаг.
  4. С мнением natalia "Все члены сообщества Codeforces важны ему и должны иметь равные права при голосовании." я не согласен. Я за то, чтобы мнение профессионалов в профессиональном сообществе ценились/учитывались больше. Сообщество у нас профессиональное. Я считаю, что на симпозиуме врачей те, кто добился больших успехов на профессиональном поприще, кто более опытен, имели больший вес, чтобы к их мнению прислушивались больше. Аналогично и здесь. Если новичок высказывает правильные, логичные и справедливые мнения, то те же авторитеты поставят ему плюсы, что поднимет авторитет первого. Авторитет надо заслуживать некоторое время и прикладывать к этому определенные усилия. Другой момент, что вес голоса авторитета не должен быть сверхбольшим (некоторые цифры идут ниже по тексту).
  5. Давайте перейдем к предполагаемым принципам работы.
    • Ограничить число голосований в сутки. Разделять голосования за посты и комментарии. Люди, имеющие серый рейтинг или не участвующие в контестах голосовать не могут (читайте выше про профессиональность сообщества). Далее ограничения растут в зависимости от авторитета (т.е. зависят от вклада и рейтинга). Можно сделать как-то так (квоты на сутки):
      Положение по вкладуГолосаДобавка к авторитету
      В top103 за топик, 9 за комментарии 3
      В top50 2 за топик, 6 за комментарии 2
      Остальные 1 за топик, 3 за комментарии 1
      Положение по вкладу надо, наверное, учитывать, используя данные последних месяцев четырех.
      Положение по рейтингуГолоса Добавка к авторитету
      Красный 3 за топик, 9 за комментарии 3
      Желтый 2 за топик, 6 за комментарии 2
      Синий, зеленый 1 за топик, 3 за комментарии 1
      Серый, не-участник контестов или не участвовал слишком долго (четыре месяца?) не голосует 0
      Период в последний строке должен совпадать с периодом сбора статистики по первой таблице, может его стоить сделать другим? Кажется, что лучше выбирать минимум для участника по обоим трекам, чтобы определять дневные квоты голосования.
    • Не более половины дневной квоты (считать отдельно по топикам/комментариям) можно отдавать одному автору.
    • Не изменять рейтинг автора на основании оценок его комментария или топика, если за них слишком мало голосовали. Например, надо более одной оценки за комментарий, более трех за топик.
    • Сделать у топиков параметр соответствия тематике сайта (реклама/бред, явный оффтопик, просто топик, разбор/учебный материал/умный анализ работы Codeforces/отчет о контесте/тематическое другое). Дать возможность админу или авторитетам устанавливать этот параметр. Численно этот параметр может быть (0, 1, 2, 3).
    • Считать авторитет автора как сумму по третьим столбцам в табличках выше и учитывать голоса с такими весами.
    • Считать вклад автора как сумму оценок по его комментариям (учитывать веса) + утроенных оценок по топикам (учитывать веса). Во втором слагаемом надо учитывать как-то параметр соответствия тематике. Например, умножать сумму по топику на этот параметр (если она положительна).
    • Отображать вклад участника как некоторую функцию от накопленной сумму (конечно, монотонную). Функция должна сначала достаточно быстро расти, потом медленней. Возможно, квадратный корень подойдет.

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

Спасибо за внимание, жду комментариев.
MikeMirzayanov

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Да, в копилке Codeforces набралось порядочное количество интересных задач, чтобы сделать свой problemset. Вот и сегодняшний день не прошел даром, и вашему вниманию представлен архив задач Codeforces. Пожалуй, единственное зачем он нужен - это чтобы было легче дорешивать задачи и понимать какие решены, а какие нет. В комментариях просили. Я не думаю, что от этой функциональности мы будем многого ждать, но кому-то станет удобнее: а это хорошо.

Архиватором выступил
MikeMirzayanov.

Полный текст и комментарии »

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

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

Всем привет!

Устали отдыхать? Требуется ваша помощь.

За период с 31-го декабря по сегодняшний день я сделал большое количество изменений в устройстве Codeforces. Изменения затронули только внутренности, так что каких-либо изменений в интерфейсе вы не заметите. Тем не менее, за это время было изменено около 150 файлов проекта, схема базы данных, некоторые принципы организации хранения данных. Короче, после всего этого я совсем не уверен, что все работает как надо (хотя, конечно, на тестирование я тоже потратил время). По этой причине я решил организовать Codeforces Testing Round #1, который будет нерейтинговым и единственная его цель - комплексное тестирование проекта в условия, приближенных к боевым.

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

Спасибо за помощь в подготовке раунда Артему Рахову, Марии Беловой и Максу Иванову.

MikeMirzayanov.

UPD: Всем спасибо! Раунд состоялся. Крупных багов не замечено. Отзывы и замечания пишите в комментариях.

Полный текст и комментарии »

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

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

С Новым Годом!

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

На Новый Год принято дарить подарки. Не знаю, что можете вы приготовить для Codeforces (задачи? статьи?), а мы решили, что на Новый Год иногда происходит то, чего не бывает в другие дни. В новогодние праздники (с 31-го декабря по 3-е января) в пользовательском интерфейсе (профиль -> настройки -> хэндл) можно будет сменить свой хэндл на любой другой. В Новый Год с новым хэндлом!


Весело отмечающая праздник,
команда Codeforces

P.S. Спасибо хабрапользователю anatoly-rr за столь красивый календарик.

UPD. Будьте осторожны. Если вы захотите временно сменить свой хэндл на смешной/поздравительный, то кто-то сможет занять ваш старый :)

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Всем привет!

Приглашаю вас принять участие в Codeforces Beta Round #48. В этот раз я выступил в роли автора контеста - приятно знаете ли иногда попридумывать задачки :) Вас же я призываю последовать моем примеру. Проект Codeforces всегда рад как новым авторам, так и тем, кто уже выступал в этой роли. 
С предложениями пишите Артему Рахову (координатору задач проекта). Участники ждут ваших задач!

UPD:
Для удобства и некоторой подстраховки, условия задач будут доступны по ссылке.

А вам я желаю красивых решений,
MikeMirzayanov

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Всем доброй ночи. Пишу я эти строки ночью, поэтому такое пожелание. Хочу представить вашему вниманию несколько улучшений на Codeforces.

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

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Всем добрый день.

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

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

С началом раунда выяснилось, что некоторое время назад, экспериментируя с настройками, я значительно уменьшил память под mysql (и tomcat для инфраструктурного приложения), что, видимо, привело к срыву начала. Вместе со стартом контеста я судорожно заходил на сервер БД по ssh, но он очень значительно напрягся от нагрузки, что у меня это получилось совсем не сразу.

Вторая неприятность - проблемы с отображением условия. Дело в том, что некоторые вспомогательные данные о задаче (условия на разных языках, картинки), которые я система достает из пакета задачи она для некоторых ускорений складывает в дисковый кэш (там есть еще in-memory cache, но он находится повыше). Когда-то давно я, недолго думая, заиспользовал Google Gson (библиотеку от Google по работе с JSON из Java). Оказалось, что у используемой версии (1.2) очень плохая производительность. Об этом кое-что написано в интернетах. Короче, десериализация файлика в несколько десятков килобайт занимала около 10 секунд :(, что приводило к ряду проблем по ходу контеста. На текущий момент, этот кусок кода уже переписан :)

И, наконец, третье. Оказалось, что у нас в принципе в форме для взломов не было валидации на длину вводимого текста. Что приводило к exception при попытке вставить в базу такой взлом, а это из-за неаккуратной реализации приводило к появлению на форме ошибке о том, что решение будто бы 
уже взломано. Говорят, что у кого-то обрезались длинные взломы ... пока не ясно как такое происходило и кто их обрезал. Короче, была добавлена валидация на длину теста для взлома (и генератора). Поставил 20 килобайт, если не помещаетесь - отсылайте генератор.

На этом пожалуй все, пойду дальше готовить раунд! Если кто не в курсе - автором раунда 48 буду я.

MikeMirzayanov

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Всем привет!

Рад сообщить вам, совсем скоро Codeforces избавит вас от чтения бесконечных "Please, give me test #??" в комментариях. Мы решили публиковать тесты и по клику на ссылку с идентификационным номером попытке в статусе будет появляться не только исходных текст решения, но и тесты на которых производилось тестирование (отчет системы тестирования). Он не будет содержать полных тестов, если они слишком велики - пока придется потерпеть и наслаждаться их префиксами. Как только мы поймем, что багов в реализации нет - мы откроем все проведенные контесты для просмотра тестов.

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

Конечно, мы не хотим, чтобы задачи Codeforces копировались с одного online judge-а на другой. Надо понимать, что Codeforces тратит огромные усилия на подготовку задач и проведение контестов. По этой причине мы ограничиваем использование материалов таким образом, что использовать наши задачи на сайтах или других системах с автоматическим тестированием - нельзя. С другой стороны мы будем рады, если материалы задач окажутся полезны для индивидуальных занятий или будут использованы на каких-то сборах, тренировках и т.п. с очным присутствием участников. Внимательно прочтите текст лицензии, так как мы хотим, чтобы некоторые данные о Codeforces были опубликованы рядом (или внутри) с условиями задач.

Пока это версия 0.1 лицензии, может мы ее достаточно сильно перепишем, но идея, я полагаю, изменений не претерпит.

Лицензия на использование материалов задач Codeforces (v. 0.1)

  1. Вы можете публиковать тексты задач Codeforces в любых открытых источниках, но должны сохранять прямую ссылку на сайт http://codeforces.ru (для англоязычных условий - http://mirror.codeforces.com) и указывать Codeforces в качестве источника задачи. Эти данные должны располагаться в непосредственной близости от условия, быть легко заметны и читаемы. Запрещается размещать задачи Codeforces в открытых источниках с поддержкой автоматизированного тестирования (имеются ввиду online judges и близкие по идее ресурсы).
  2. Вы не можете использовать тесты и другие материалы задач (генераторы, чекеры, валидаторы) для публикации задач в открытых источниках с поддержкой автоматизированного тестирования (имеются ввиду online judges и близкие по идее ресурсы) даже с учетом изменения оригинальных условий задач.
  3. Вы можете использовать предоставленные материалы: тесты, генераторы, чекеры, валидаторы и др. для индивидуальных занятий, а так же проведения краткосрочных учебно-тренировочных мероприятий с очным присутствием участников. Условия задач должны содержать данные из пункта 1 настоящей лицензии. Вторичное (последующее) распространение задач должно содержать настоящую лицензию и подчиняться ей в полной мере.

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Всем добрый вечер. Хотя, конечно, не совсем он и добрый.

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

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

К следующему раунду у меня прибавляется работы, тем более, что я собираюсь быть его автором :)

М.

Полный текст и комментарии »

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

Автор MikeMirzayanov, 14 лет назад, По-русски
Всем доброго дня!

Несмотря на то, что Артем Рахов подготовил сегодняшний контест - пост пишу я, так как он в настоящий момент готовится к финалу ACM-ICPC, решая тренировку вместе с однокомандниками.

В подготовке контеста принимали участие: Артем Рахов, Геральд Агапов (поздравляю с "покраснением") и Мария Белова.

Желаю высокого рейтинга,
MikeMirzayanov

Полный текст и комментарии »

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