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

Автор Egor11 дней назад, По-русски

Good news everyone!

9 мая (всех с праздником!) в 5 утра по Москве, наше любимое время, состоится очередной SRM

Полный текст »

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

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

Состоится сегодня в 15:00 по Москве

Имеется призовой фонд в $5000, так что поспешите с регистрацией, кап может быть достигнут досрочно

Полный текст »

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

Автор Egor2 месяца назад, По-русски

Я правильно понимаю, что по мнению авторов ГП Азова слон не является шахматной фигурой?

UPD: Официально объявлено, что Гран-при внезачетный

Полный текст »

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

Автор Egor2 месяца назад, По-русски

FYI — началась регистрация

Финал 27 июля в Нью-Йорке (изначально сообщали про Париж, в какой-момент изменили — непонятно)

Полный текст »

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

Автор Egor3 месяца назад, По-русски

Вышла новая версия. Вышла она ради баг фиксов для TopCoder’а (проблемы с SRM 530 Div-2 Medium, SRM 531 Div-2 Easy и SRM 534 Div-1 Medium), так же: UI: switch task to current editor and editor to current task automatically Fixed width font for tests

Скачать можно здесь Изменений в формате конфигурации не было

Полный текст »

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

Автор Egor4 месяца назад, По-русски
Как вы, может быть, знаете, в этом году TCO объявлен очень рано и уже идет в некоторых треках (Design, Development, Studio, etc.)
Позавчера объявили правила алгоритма и они очень серьезно изменились. Теперь нас ждут:
3 * Online Round 1 (бывший квалификационный раунд, из каждого выходят 600 человек, участвовать можно во всех, но регистрация закаплена на 2000 человек в каждый раунд)
3 * Online Round 2 (к 1800 победителям первого раунда добавляется топ-200 по рейтингу, из каждого забега выходит по 50 человек, участвовать можно во всех)
2 * Online Round 3 (из каждого выходит по 12 человек на онсайт, участвовать можно во всех)
Кроме того, для тех, кто уже вышел из 2го/3го раунда будут добавлены дополнительные рейтинговые раунды параллельно с раундами 2BC/3B (в таком раунде для 3B, например, смогут участвовать всего 12 человек - весело)
Одним из спонсоров будет Google, однако Петя может расслабиться - с этого года сотрудники компаний спонсоров, не участвующие непосредственно в подготовке контеста допускаются к участию.
Thoughts? Я думаю, что за счет новой системы отбора этот онсайт должен быть гораздо сильнее предыдущих
Вот ссылка на сайт. Я уже зарегистрировался, но вот сейчас совершенно не могу найти, где это сделать - может, из-за того, что я залогинен, мне не показывают ссылку на регистрацию

Полный текст »

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

Автор Egor4 месяца назад, По-русски
Вроде бы контест уже совсем закончился
Кто-нибудь умеет вторую решать? Я послал наивное решение, которое в худшем случае работает за 22n, но придумать для него контртест не смог.

Полный текст »

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

Автор Egor5 месяцев назад, По-русски

Господа, а объясните мне тупому, как так вышло, что человека, который выиграл в один год GCJ и TCO первым на звание участника года выдвинул я перед самым концом процедуры выдвижения? Давайте исправим несправедливость. Выдвижение вот даже продлили до 17:00

UPD: идет голосование

Полный текст »

 
 
 
 

Автор Egor6 месяцев назад, По-русски

<p

1. Установка
Надо скачать файл плагина и файл конфигурации. Файл плагина надо положить в %home_dir%.IntelliJIdea10configplugins (если папки plugins нету — создать ее), а так же добавить в качестве библиотеки к модулям своего проекта (делается через Project Structure -> Dependencies -> Add Single Entry Module Library…). Затем поправить конфигурацию согласно своим нуждам, положить ее в корень проекта — и все, можно использовать. Для работы с TopCoder необходим плагин moj для арены, инструкции и ссылка — здесь, инструкция на русском — здесь


2. Конфигурация
В конфигурации надо задать несколько директорий. Директория задается путем от корня проекта с заменой на /. Пройдемся по пунктам:
inputClass - полное имя класса, используемого для ввода (полное имя — имя пакета + имя класса). Этот класс должен иметь метод next() возвращающей String — следующий токен (как у Scanner) и конструктор, принимающий InputStream. Собственно, Scanner подходит, но он довольно медленный
outputClass - полное имя класса, используемого для ввода (полное имя — имя пакета + имя класса). Соответствующий класс должен иметь 2 конструктора от OuputStream и от Writer и иметь метод close. По умолчанию — java.io.PrintWriter
excludePackages - перечисленные через запятую префиксы пакетов, которые вы не хотите включать в итоговый код, потому что они являются частью окружения на сервере). В большинстве случаев менять значение не надо
outputDirectory - папка, куда складывается итоговый исходный файл (который потом посылается на сервер для проверки). Должна находится в source директории какого-либо модуля в пакете по умолчанию. В проекте, создаваемым idea по умолчанию можно указать папку src
author - содержание тега @author в итоговом файле. В случае пустого значения тег не ставится
archiveDirectory - папка, куда исходники складываются при архивировании. Не рекомендуется, чтобы эта папка была частью source какого-либо модуля. Можно оставить по умолчанию, тогда при первом архивировании эта папка будет создана
defaultDirectory - папка, где будут создаваться автоматически созданные задания. Должна быть в исходном коде какого-либо модуля, но не в пакете по умолчанию. В проекте, созданном по умолчанию, должна быть вида src/package path, например, src/my/package
topcoderDirectory - папка, куда TopCoder плагин moj складывает созданные исходники. Правила те же, что и для outputDirectory. Если не участвуете в TopCoder — можно не беспокоится о значении этой настройки
enableUnitTests - если вы хотите, чтобы на основе ваших заданий создавались юнит тесты, то надо установить в true
testDirectory - если вы не установили значение предыдущей настройки в true, то может иметь любое значение. Иначе должна находится в исходном коде любого модуля, который может видеть те же классы, что и defaultDirectory (собственно, может быть в том же модуле)
Вот и все. Стоит заметить, что после смены конфигурации, чтобы изменения вступили в силу, надо перезагрузить проект

3. Использование
Добавьте себе на главную панель инструментов (Customize Menus and Toolbars… в контекстом меню панели инструментов) из Plug-ins->CHelper следующие кнопки: New Task, Edit Tests, Archive Task, Delete Task, Create Codeforces Tasks.



New Task (Alt+F2) — создает новое задание в defaultDirectory и выбирает его в качестве активного.
Edit Tests (Alt+F5) — открывает редактор тестов (в том числе для TopCoder)

Archive Task (Alt+F6) — удаляет задание, сохраняя код в archiveDirectory и, если включено, создавая unit test в testDirectory
Delete Task - удаляет задание и все его файлы
Parse Contest - создает все задания для определенного соревнование (пока поддерживаются Codeforces, CodeChef, E-Olimp и Timus).

Parse Task - то же самое, что и предыдущий пункт, но создает только одно задание.

Название сайтаID соревнованияID задачи из архиваID задачи из соревнования
 Codeforces contest_id (131) contest_id letter (131 A)contest_id letter (131 A
 CodeChef contest_code (NOV11) problem_code (GCD2) contest_code problem_code
(NOV11 DOMNOCUT)
 E-Olimp contest_id (1243) problem_id (2656) problem_id letter (2656 A)
 Timus contest_id (101) problem_id (1000) contest_id problem_number (101 1)
Copy Source (Alt+F8) — копирует содержимое Main.java в буфер обмена. Полезно для сайтов, которые не поддерживают отправку файла

4. Меню настройки новой таски

Name - имя класса для задания. Если используются файлы .in/.out, то стоит использовать такое имя, которое при переводе в нижний регистр совпадает с именем входного/выходного файла (без расширения)
Test type - каким образом идут тесты — по одному на файл, сначала количество тестов, а потом сами тесты или тесты прекращаются по какому-то условию (скажем, вход из нулей). В последнем случае основной метод должен кидать UnknownError когда условие выхода выполнилось)
Input type/Output type - тип ввода/вывода. Standard — через стандартный поток, Task_id — см. Name, Custom — имя файла задается в появившемся поле
Heap memory - ограничение на размер памяти
Stack memory - ограничение на размер стека

5. Созданные файлы
В основном файле задания есть один единственный метод - void solve(int testNumber, %input% in, %output% out)
testNumber — номер теста в файле начиная с 1
В файле чекера есть 3 метода:
String check(%input% input, %input% expected, %input% actual)
возвращает null, если ответ правильный, не пустую строку если неправильный, пустую строку для запуска чекера по умолчанию (потокенное сравнение)
double getCertainty()
возвращает точность сравнения даблов для чекера по умолчанию. Если 0, то будут сравниваться как токены
Collection<? extends Test> generateTests()
возвращает набор дополнительных тестов, которые генерируются программно
<p

Полный текст »

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

Автор Egor6 месяцев назад, По-русски
Обновлено до версии 2.33 - поменялся формат страниц Codeforces
Обновлено до версии 2.32 - не удален отладочный вывод
Обновлено до версии 2.31 - TopCoder задание могло не запускаться, если первым аргументом была строка (баг проявляется не всегда)

Изменения:

Defect Task generation: CodeChef: Multiple samples not working
Defect TopCoder: main method not deleted even if unused
Enhancement Task Generation: E-Olimp support
Enhancement Task Generation: Timus support
Enhancement Tester: add option to trunkate long input/output and enable it by default
Enhancement Parser: remember selected contest/task site for current session

Ввод/вывод более 2000 символов теперь по умолчанию сокращается в тестере - печатаются первые 1500 и последние 100 символов через троеточие. Выключить это для текущего задания можно в меню Edit Configurations
Форматы id для новых сайтов будут добавлены в инструкцию
Скачать плагин можно здесь, формат конфигурации плагина не изменился

Полный текст »

 
 
 
 
  • Проголосовать: нравится  
  • +5
  • Проголосовать: не нравится  
  • Отправитель   Egor
  • Дата публикации   6 месяцев назад
  • Комментарии   1

Автор Egor6 месяцев назад, По-русски

Изменения:

Enhancement Add universal interface for task generation
Enhancement Tester: ability to pass message from checker irrespective from verdict type
Defect New Task: default directory should be created if absent
Enhancement Create action to copy full source in order to submit to judges that do not provide file selection as option
Enhancement Task generation: support for CodeChef

Теперь можно генерировать не только таски на весь контест, но и отдельную таску из архива - в качестве id надо ввести "номер_контеста буква_таски", например, "128 B". Кроме того, введена поддержка CodeChef. Тесты на нем структурированы гораздо хуже, так что используется эвристика. Возможно добавление в тест пустых строк, а так же может вообще не сработать. На последних 10 контестах все таски генерируются, проверено. Id для контеста - последняя часть url его страницы, например - NOV11. Id для таски из архива - ее Problem code (например, "LCM"), а для таски из контеста - "contest_id problem_code" (например, "NOV11 DOMNOCUT")
Так же добавлена еще одна акция, которая просто копирует содержимое Main.java (созданный файл) в буфер обмена. Полезно для джаджей, которые не поддерживают отправку файла

Ссылка на плагин, конфигурация не изменилась

Полный текст »

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

Автор Egor6 месяцев назад, По-русски
Всем привет!

Сегодня в 20:00 по Москве состоится очередной TopCoder SRM

Полный текст »

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

Автор Egor7 месяцев назад, По-русски
Изменения:
Defect Codeforces generation: should unescape HTML
Defect TopCoderTester: should accept arrays without curle bracers
Enhancement Add ability to select tests on which task would be tested
Enhancement Allow using custom output class instead of PrintWriter
Enhancement Tester: Should return WA if actual is not exhausted in checker

Соответственно добавлена новая настройка в файл конфигурации - outputClass. По умолчанию - java.io.PrintWriter. Соответствующий класс должен иметь 2 конструктора от OuputStream и от Writer и иметь метод close. Не обязательно скачивать новую конфигурацию - если вы не собираетесь менять эту настройку, то можно ее просто не упоминать - значение по умолчанию будет использовано в любом случае (верно вообще для всех настроек)
Метод next ввода теперь должен кидать исключение, если файл закончился (для Scanner'а это так)
Ссылки для скачивания: plugin, конфигурация

Полный текст »

 
 
 
 
  • Проголосовать: нравится  
  • +3
  • Проголосовать: не нравится  
  • Отправитель   Egor
  • Дата публикации   7 месяцев назад
  • Комментарии   0

Автор Egor7 месяцев назад, По-русски

Картинки для привлечения внимания:



Текущая версия - 2.33

Итак, попробуем еще раз. Я переписал с нуля плагин для IntelliJ Idea (напомню, у нее есть бесплатная весрия), который позволяет во-первых, один раз ввести тесты, а затем тестить на них всех, во-вторых, инлайнить файлы из собственных библиотек, а в третьих - на основе введенных тестов создает юнит тесты для библиотеки. Я думаю, что прошлая версия не получила распространения из-за сложности в начале использования - нужен был специальный проект, надо было не забывать нажать "Run Task" перед посылкой на сервер и т. д. Кроме того, в качестве бонуса, данная версия умеет автоматически создавать таски (включая семпл тесты) для контестов Codeforces.

Инструкция

Если возникнут какие-либо проблемы - пишите комментарии к этой записи, а не задавайте через личку - возможно, у кого-то еще такие же проблемы

Полный текст »

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

Автор Egor7 месяцев назад, По-русски
Для моего плагина (а точнее - для акции, которая генерирует таски для контеста Codeforces) требуется иконка Codeforces размера 16*16. Есть такая?

Полный текст »

 
 
 
 
  • Проголосовать: нравится  
  • +11
  • Проголосовать: не нравится  
  • Отправитель   Egor
  • Дата публикации   7 месяцев назад
  • Комментарии   2

Автор Egor9 месяцев назад, По-русски

Мои знакомые знают, что я считаю, что Google довольно раздолбайски относятся к организации CodeJam. Однако сегодня я оценил, что такое настоящее раздолбайство со стороны организаторов контеста. Сегодня все участники онсайта RCC получили письмо с просьбой проверить, устраивает ли их билеты на поезд/самолет. То, что письмо пришло с e-mail'ами всех участников в сс (вместо bcc) - это ладно, привыкли уже. Но к письму прилагался файл, в котором помимо транспорта были указаны паспортные данные, домашние адреса и телефоны всех участников. Так что имейте ввиду на будущее как компания mail.ru относится к персональным данным

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

Полный текст »

Теги rcc
 
 
 
 

Автор Egor10 месяцев назад, По-русски

Финал Google CodeJam состоится 29 июля в 4:00 по Москве

Рассказ одного из участников Первая часть, Вторая часть

Полный текст »

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

Автор Egor10 месяцев назад, По-русски

Добрый день.

Сегодня в 20:00 по Москве состоится четвертый отборочный раунд TopCoder Open. В пятый раунд пройдет 60 участников. Всем удачи!

Полный текст »

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

Автор Egor11 месяцев назад, По-русски
Сегодня, 2 июля, в 20:00 по Москве состоится очередной TopCoder SRM

Полный текст »

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

Автор Egor11 месяцев назад, По-русски

Добрый день.

Сегодня в 20:00 по Москве состоится второй отборочный раунд TopCoder Open. В третий раунд пройдет 350 участников. Всем удачи!

Полный текст »

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

Автор Egor11 месяцев назад, По-русски
Добрый день.
Сегодня в 20:00 по Москве состоится первый отборочный раунд TopCoder Open. Во второй раунд пройдет 850 участников. Всем удачи!

Полный текст »

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

Автор Egor12 месяцев назад, По-русски
Состоится сегодня в 19:00 по Москве

Полный текст »

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

Автор Egor13 месяцев назад, По-русски
...состоится 16 апреля в 20:00 МСК

Полный текст »

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

Автор Egor13 месяцев назад, По-русски
Пожалуй, я уже готов выложить плагин для Intellij Idea для общего доступа (исходный код будет открыт завтра после окончания CodeChef Long Contest)

Что делает данный плагин:
  • Инлайнит классы из вашей библиотеки в один файл
  • Убирает неиспользуемый код
  • Позволяет вбить один раз тесты и запускать на всех тестах одной кнопкой

Что он не делает:
  • Не решает за вас задачи

Плагин находится в стадии альфа-тестирования. Известны следующие баги:
  • Иногда при нажатии на Delete task не удаляется файл самой таски. Можно удалить руками
  • Не удаляет циклические вызовы методов, а так же циклическое использование классов в конструкторе
  • Не удаляет методы, которые исполняют какой-либо интерфейс/являются переопределением методов наследуемых классов. Естественно, если наследуемый класс удален сам или данный класс нигде не используется метод будет удален вместе с классом. Пример - если вы используете класс из библиотеки с определенным методом toString то он не будет удален даже если не используется в коде
  • Не удаляет метод с именем main независимо от сигнатуры
  • Не поддерживаются static imports
Конечно, используете вы плагин на свой страх и риск
Плагин поставляется вместе с проектом, подготовленным для совместного использования. Плагин рассчитывает, что вы будете пользоваться именно этим проектом. В проекте есть 3 таски в качестве примера использования - 2 обычных и 1 для TopCoder.
Инструкция:
  1. Добавить на toolbar кнопки плагина (Customize Menus and Toolbars -> Main Toolbar -> Add after... -> Plug-ins -> Contest helper)
  2. Нажать кнопку New Task. Ввести имя таски, выбрать тип тестов (Single - один тест на файл, Multi Number - первым токеном дано число тестов, Multi EOF - ввод до конца файла либо до теста с нулевыми значениями), тип ввода/вывода (StdIn - стандартный поток, File Task Id - id таски в нижнем регистре + .in/.out, File Custom - какие либо другие названия файлов)
  3. Будет создан и открыт файл, в котором надо непосредственно писать решение. Функции в качестве параметров передадут номер теста в файле (начиная с 1), входной поток (InputReader, о нем ниже) и выходной поток (PrintWriter). Так же будет создан файл чекера, по умолчанию он просто сравнивает токены
  4. Кнопка Edit Tests позволяет вбить тесты. Ваш КО
  5. Когда вы дописали код и вбили тесты - нажимаете кнопку Run Task. Она потупит некоторое время и создаст все необходимые файлы. После этого можно запускать конфигурацию Tester Debug для работы непосредственно в модуле main/lib или Tester Run если вы хотите посмотреть, как будет вести себя непосредственно то, что вы пошлете на сервер
  6. Не забывайте нажимать на кнопку Run Task каждый раз, как вы сделали изменения в вашем коде/добавили тесты. Не стоит менять что-то в классе Main который лежит в модуле test - при следующем запуске Run Task эти изменения потеряются
  7. На сервер надо отсылать файл Main из модуля test
Для топкодера все чуть проще - вам достаточно настроить moj (или любой другой плагин, который генерит сурцы) на корневую папку модуля topcoder. Файл в модуле main будет автоматически сгенерирован, затем нужно будет только нажать Run Task и можно будет нажимать Compile в арене.
Кнопка Delete Task просто удалит таску, а Archive - скопирует все файлы таски в package unsorted модуля archive.
Ваши библиотечные классы должны лежать в модуле lib не в default package и не в package с именем, совпадающем с каким-либо из дефолтных package java (например - java.util)

Ссылки для скачивания:

Update: Про InputReader. В модуле utils в package net.egork.io лежит обрезанная версия моего класса для ввода достаточная для работы плагина. Сделано это чтобы вас не обвинили в использовании чужого кода. Можете дописывать туда все, что вам нужно - этот ввод очень быстро работает

Update 2: Еще замечание - если пишете COCI - не называйте таску так же, как она называется у них. Связано с особенностью их тестера

Update 3: Исходный код тут. Писалось по ночам, не судите строго
И да, хоть кто-нибудь поставил? Если да, то как впечатления? Чего не хватает?

Update 4: Вышла новая версия. Для скачивания доступен плагин и проект. В проекте изменились фалы main/Tester.java, test/Tester.java и utils/main/net/egork/utils/checker/Checker.java, если вы уже скачивали проект вам надо обновить только их
Изменения:
Добавлена кнопка Restore Task которая восстанавливает таски из package unsorted (выдается список, где можно выбрать конкретную таску)
Файл таски синхронизируется перед Run Task
Можно добавить тесты из кода - для этого надо изменить метод generateTests чекера
Есть возможность запустить только на определенных тестах из набора - для этого тестеру в качестве аргументов командной строки надо передать номера тестов. Номера идут с нуля, сначала тесты введенные из GUI, потом тесты из генератора

Update 5: Вышел маленький некритичный фикс. Обновление только для плагина, заново скачивать проект не надо

Полный текст »

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

Автор Egor13 месяцев назад, По-русски
состоится 8 апреля в 5:00 МСК

Полный текст »

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