arti's TopCoder Tools
С самого первого контеста на TopCoder мне показалось очень неудобным полностью писать вручную класс решения. Я попробовал пару плагинов, которые можно найти на сайте, но они мне не понравились. Минусом многих плагинов (для меня) является интеграция в какую-то IDE или арену – я обычно использую только какой-нибудь редактор кода и файловый менеджер (обычно Kate + Midnight Commander, а в плохие дни Far Manager + Notepad++). Также, для тестирования решения на разных тестах с помощью обычных плагинов нужно перекомпилировать решение, что, согласитесь, в корне неправильно.
В итоге я написал свою небольшую систему скриптов, которой и делюсь с Вами. Возможности:
- генерация класса решения на основе прототипа;
- удаление unused code;
- каждый тест – отдельный файл;
- автоматическая генерация тестов из условия;
- проверка на отдельном тесте или всех тестах по очереди с проверкой правильности ответа и времени выполнения и красивой подсветкой результатов тестирования;
- копирование ваших библиотек (prewritten code) для удобства непосредственно в каталог задачи;
- скрипты написаны с использованием C++ и Bash (для Windows – bat) кроме одного на Java, так что все работает очень быстро.
Для работы необходимо:
- распаковать архив (например в topcoder/utils);
- для инициализации контеста запустить скрипт ./tsc из topcoder/utils, передав в качестве параметра название контеста или любую строку, это будет название подкаталога в каталоге topcoder (например, ./tsc srm411-division1);
- скопировать условие задачи в соответствующий файл в подкаталоге statements в только что созданном каталоге с названием контеста (например, topcoder/srm411-division1/statements/a.txt);
- перейти в каталог соответствующий задаче (topcoder/srm411-division1/a);
- запустить скрипт tgp – он создаст файл для класса-решения (.h), программу для тестирования (.cpp) и скопирует .h-файлы из topcoder/utils/includes в текущую папку;
- запустить tgt – сгенерятся тесты из условия;
- решить задачу
– редактировать надо только файл .h; - скомпилировать командой tgcc;
- проверить на тестах – tgta;
- почистить unused code – tcl ClassName.h;
- отправить текст из ClassName.h в арену (может помочь скрипт tcp ClassName.h, к сожалению для X-ов программно скопировать текст из консоли не получилось
).
Выглядит сложно, но если потренироваться пару раз, то все работает очень быстро и лишнее время тратится только на копирование условия / текста решения.
Система используется больше двух лет (правда в основом Linux-версия) и ни разу не подводила (по крайней мере, я не помню случаев). На данный момент все фичи работают для C++ и есть очень базовая поддержка Java (генерация прототипа – tgp с параметром java, компиляция – tjc).
Выкладываю как Linux, так и Windows-версию:
arti’s TopCoder Tools (Windows)
Использовать на свой страх и риск, очень рекомендую попробовать в practice session перед использованием непосредственно на контесте. Вопросы, предложения и дополнения принимаются в комментариях и на email.
Постовой (да, да, и я тоже
>Минусом многих плагинов (для меня) является интеграция в
> какую-то IDE или арену – я обычно использую только
> какой-нибудь редактор кода и файловый менеджер
Плагин FileEdit и ему подобные как раз подходят для таких целей – открываешь задачу, и они сами за тебя пишут шаблон решения с тестами в файл, который потом можно править в любом редакторе. А при сабмите на сервер код берется из этого самого файла, и не надо ничего лишний раз копировать.
> к сожалению для X-ов программно скопировать текст из консоли не > получилось
echo quick brown fox jumps over the lazy fox | xsel -b
Но с плагинами необходимость что-либо вообще копировать или вставлять полностью отпадает.
> скомпилировать командой tgcc;
> проверить на тестах – tgta;
Я тоже компилирую и прогоняю тесты локально, но мне обычно влом много печатать. Я завел алиасы в bash’e: g = компилировать, p = програть тесты и так и живу…