Плагін Moj для участі в TopCoder SRM

Вступ

Людям, які захоплюються спортивним програмуванням, добре відомі змагання корпорації TopCoder. Серед них, мабуть, найпопулярнішим видом є Single Round Match, або SRM. Схема SRM'ів досить специфічна, і в чомусь неповторна. Якщо коротко - спочатку учасники вирішують 3 завдання різних рівнів складності, потім деякий час шукають помилки у опонентів, отримуючи за це додаткові очки.

Для організації таких змагань TopCoder створили Java-апплет (TopCoder Arena). Також знайшлися умільці, які для цієї самої арени написали плагіни, щоб спростити життя собі та іншим. Але установка останніх часто викликає труднощі у початківців SRM'щиків. Саме ця проблема стала мотивом для написання цієї статті.

З чого почати?

Починати завжди потрібно з самого початку, в даному випадку - з установки арени. Як згадувалося раніше, арена - це Java-апплет. Отже, перше, що нам знадобиться - це Java Runtime Environment (JRE) + Java Web Start (JWS), які йдуть одним пакетом.

Встановлення Java

Крок 1. Щоб завантажити Java, пройдіть за посиланням www.java.com/ru/download/manual.jsp. Виберіть потрібний установчий файл зі списку:

Крок 2. Встановіть Java. На Вашому комп'ютері будуть автоматично встановлені необхідні компоненти, а саме JRE + JWS:

Встановлення TopCoder Arena

Крок 3. Відвідайте сайт www.topcoder.com/tc.

У майбутньому на цьому ж сайті ви зможете заглядати в календар подій («Events calendar»), перевіряти рейтинг, брати участь в обговореннях на форумі та багато іншого. В даний момент нам потрібна арена. У меню ліворуч виберіть «Competitions» - «Algorithm» - «Single Round Matches (SRM)» - «Launch Arena», після чого побачите приблизно таке вікно:

Примітка 1. Так, там написано, що у мене на встановлений JWS, але насправді це не так. Просто він встановлений не як окрема складова, а йде в пакеті Java з усім іншим.

Примітка 2. Користувач Nicolette зауважила, що після натискання «Launch Arena» віконце з червоною кнопкою може і не відкритися. Замість цього, за її словами, відразу почнеться завантаження «ContestAppletProd.jnlp». Що ж, зрештою, саме скачування цього файлу і є головною метою на даному кроці. Не лякайтеся, якщо що.

Тисніть на велику червону кнопку, і Вам запропонують завантажити файл «ContestAppletProd.jnlp». Це і є той самий Java-апплет. Скачуєте і запускаєте, в результаті побачите вікно вітання:

Тут же Вам пропоную зареєструватися, якщо Ви - новий користувач.

Вітаю, арена встановлена. Наступне наше завдання - встановлення і налаштування плагіну Moj.

Встановлення і налаштування плагіну Moj

Крок 4. Завантажте файли плагіну Moj. Знайти їх можна, наприклад, на форумі TopCoder:

apps.topcoder.com/forums/;jsessionid=84612D3FBAD554FF37DD381DD857BC20?module=Thread&threadID=597911&start=0&mc=60

або завантажити прямо звідси:

github.com/downloads/lovrop/topcoder-moj/moj_4.16.zip

Розпакуйте завантажений архів у будь-яку зручну теку.

З'єднання Moj

Крок 5. В арені відкрийте вікно параметрів редактора («Options» - «Editor»):

У результаті побачите вікно:

Крок 6. Натисніть кнопку «Browse» навпроти поля «Common ClassPath». У вікні, що з "явиться, перейдіть до теки з розпакованим плагіном:

і виберіть три * .jar файли:

  • jar
  • jar
  • jar

Крок 7. У вікні налаштування натисніть кнопку «Add». Вікно, яке відкривається, заповніть наступними значеннями:

  • Name: Codeprocessor2.0
  • EntryPoint: codeprocessor. EntryPoint
  • ClassPath: аналогічно до кроку 6 виберіть 3 вказаних * .jar файли.

У вікні налаштування з "явиться новий рядок, який відповідає встановленому плагіну. Щоб зробити його плагіном за замовчуванням, виставте відповідні галочки «Default» і «At Startup»:

Параметри Moj

Крок 8. У вікні налаштування виберіть рядок, що відповідає Codeprocessor2.0, і натисніть кнопку «Configure». У вікні, що з'явилося, натисніть кнопку «Add». В результаті з'явиться порожній (білий) рядок, в який потрібно вписати «moj.moj». У полі «Editor EntryPoint» введіть «fileedit.EntryPoint».

Крок 9. Натисніть «Configure» навпроти поля «Editor EntryPoint». У вікні «Enter directory to read/write problems to» введіть шлях до теки, в якій будуть з'являтися шаблони коду при відкритті нового завдання.

На вкладці «Code Template» пропонується ввести шаблон коду, який буде прописаний у файл вихідного коду. Як приклад можу запропонувати свій (якщо будете копіпастити - не забудьте попередньо вибрати мову С++): pastebin.com/kwt4Whp3

Крок 10. Натискаємо Save:

У вікні налаштування Codeprocessor'a натискаємо кнопку «Verify». Якщо все пройшло успішно і з'єднано правильно - повинні отримати повідомлення про те, що всі компоненти знайдені:

Знову тиснемо «Save», отримуючи попутне наступне попередження:

На цьому параметрі завершується.

Перевірка плагіну

Для перевірки дієздатності Moj'a, в арені вибираємо будь-яку кімнату для тренування («Practice rooms»):

В інтерфейсі кімнати в полі «Choose problem» виберіть будь-яке з 3 завдань. До слова, там же відразу і побачите кількості балів, якими оцінюються завдання.

Відкривши завдання, ви побачите наступне вікно:

Саме тут ви можете прочитати умову, перевірити Activity Log і переконатися, що Moj спрацював. Для вірності (і для тренування), відкрийте код і напишіть рішення. До слова, одна з фіч TopCoder'a: потрібно написати не цілу програму, а всього лише клас. Дані подаються як аргументи методу класу, результат повертається через значення методу. Moj - дописує всі (за шаблоном), що знаходиться поза класом. Завдяки цьому ви можете, запустивши програму, перевірити свій код на тестах з умови, які автоматично прописуються Moj'ем прямо у вихідний файл.

Коли клас готовий - натискайте послідовно «Save», «Compile», «Test» (опціонально), «Submit». На цьому написання коду зазвичай завершується, і рішення вважається отриманим (але не обов'язково правильним - коректність перевіряється під час системного тесту, наприкінці змагання).

Ув'язнення

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

COM_SPPAGEBUILDER_NO_ITEMS_FOUND