Открытое соревнование по программированию искусственного интеллекта

Языковые пакеты

Проект

Песочница

Раунд 1

Раунд 2

Финал

Песочница (на 15 декабря 2013 г.)

Последние комментарии

4 сентября 19:00: risi написал комментарий в посте Закрытие Russian AI Cup 2013
28 февраля 02:59: puk написал комментарий в посте Закрытие Russian AI Cup 2013
26 февраля 21:12: amurushkin написал комментарий в посте Закрытие Russian AI Cup 2013
26 февраля 13:17: alevlaber написал комментарий в посте Закрытие Russian AI Cup 2013
20 февраля 17:33: Megabyte написал комментарий в посте Закрытие Russian AI Cup 2013
20 февраля 10:10: mopdobopot написал комментарий в посте Закрытие Russian AI Cup 2013
20 февраля 09:28: aleex написал комментарий в посте Закрытие Russian AI Cup 2013
18 февраля 23:13: santa324 написал комментарий в посте Закрытие Russian AI Cup 2013
17 февраля 14:43: m16a написал комментарий в посте Закрытие Russian AI Cup 2013
17 февраля 06:26: PAX написал комментарий в посте Закрытие Russian AI Cup 2013

Группа ВКонтакте

 

Для написания собственной стратегии для CodeTroopers опубликованы языковые пакеты. На данный момент мы поддерживаем языки:

Язык Версия компилятора Ссылка
C GCC 4.7.2 скачать пакет для C
C++ и С++11 g++ GCC 4.7.2 скачать пакет для C++
Java Java 1.7.0_45 скачать пакет для Java
C# Visual C# compiler version 4.0.30319 for .NET framework 4.5 скачать пакет для C#
Pascal Free Pascal сompiler version 2.6.2 скачать пакет для Pascal
Python2 Python 2.7.4 скачать пакет для Python2
Python3 Python 3.3.2 скачать пакет для Python3
D DMD32 D сompiler v2.063.2 скачать пакет для D

Пакет для D поддерживается участником isenbaev.

Каждый языковой пакет содержит в себе набор моделей (Trooper, Bonus, Player и т.д.), класс MyStrategy, в котором вы пишете логику своей стратегии, а также файлы Runner.* и RemoteProcessClient.*, необходимые для запуска процесса стратегии и обмена данными с процессом игры.

В каждом языковом пакете находятся bat-файлы, осуществляющие сборку стратегии в исполняемый файл (исключения: языковой пакет на Java собирается в jar-архив, языковые пакеты на Python собираются в zip-архив).

Кроме того, в некоторые языковые пакеты вложены файлы проектов одной или нескольких популярных IDE:

  • для С++ вложен проект Visual C++ 2005;
  • для Java вложены проекты Maven 2, Intellij IDEA 12, Eclipse;
  • для C# вложен проект Visual C# 2010;
  • для Pascal вложены проекты Delphi и Lazarus IDE.

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

Обновлено:

  • 4 ноября 22:30: Сильно переделан клиент C++. По многочисленным пожеланиям трудящихся мы решили уйти от Google Code Style. Теперь клиент выдержан в стиле, похожем на стиль qT с небольшими изменениями (например, открывающая фигурная скобка не сносится на новую строку, а символы «&» и <<*>> прижаты к типу, а не имени переменной). Можете называть это Java style :-) Уже принятые системой посылки должны продолжать работать.
  • 4 ноября 22:30: Исправлен метод world.is_visible() в клиенте Python 2.
  • 5 ноября 20:30: Обновлён клиент C++: исправлен вызов функции sqrt() в методе Unit.getDistance(), карта видимостей клеток переделана с использованием одномерного вектора.
  • 6 ноября 15:30: Обновлены все клиенты. Переименован метод Trooper.getShotCost -> getShootCost. Добавлен метод Trooper.getDamage(TrooperStance). Небольшие правки в клиенте C++.
  • 9 ноября 15:30: Добавлено новое действие командира — запросить разведку с воздуха, позволяющее получить примерные сведения о расположении противника. Это действие малоэффективно в начале игры, однако позволит выследить последнего оставшегося противника, если он вздумает прятаться. Подробнее об это читайте в правилах.
  • 9 ноября 15:30: Добавлены конструкторы по умолчанию для Trooper и Bonus в клиенте C++.
  • 9 ноября 15:30: Порт взаимодействия Local runner’а и стратегии изменён с 31000 на 31001 во избежание конфликта с другими программами.
  • 13 ноября 20:00: Поддержаны C++11 и D. Спасибо участникам cNoNim и isenbaev.
  • 20 ноября 16:00: Изменён компилятор C#: с Mono.NET на Visual C#. Добавлена поддержка .NET 4.5.
  • 23 ноября 22:00: Небольшие исправления в клиенте D.
  • 13 декабря 17:00: Добавлен языковой пакет для языка C. Разработку и поддержку осуществляет участник noop.


MekaGem

MekaGem

MIPT

(Java) Могу ли я быть уверенным, что поля класса World не будут изменены после совершения хода? Если да, то тогда зачем копировать массив cells?

04.11.2013 16:49:18
bovykingmail.co

model.* java не компилируется из-за UTF-8, кажется лучше бы вообще код по английски комментировать - участников было бы больше раза в два

04.11.2013 21:45:14
SladeThe

SladeThe

Команда Russian AI Cup

в языковом пакете c++, наблюдается странная вещь: Trooper trooper = readTrooper(); World world = readWorld();

return new PlayerContext(trooper, world); где: class PlayerContext { private: const Trooper& trooper; const World& world; public: PlayerContext(const Trooper& trooper, const World& world);

const Trooper& getTrooper() const;
const World& getWorld() const;

}; …

Спасибо. Исправили. Попробуйте скачать пакет заново.

05.11.2013 1:01:30
SladeThe

SladeThe

Команда Russian AI Cup

pisarev_a

pisarev_a

Логос-АТ

На С++ нет возможности поменять положение труппера. Или они сами падают когда хотят?

move.setAction(LOWER_STANCE); return;

05.11.2013 1:02:52
SladeThe

SladeThe

Команда Russian AI Cup

Locky

Locky

Киев

На питоне 2.7 не работает расчет видим враг или нет… Уже для отладки сделал такой код: a = [] for x in xrange(10): a.append(world.is_visible(7, 20, 15, 0, 20-x, 15-x, 0)) в итоге получаю список [False, False, False, False, False, False, False, False, False, False] значение поля cell_visibilities у World в дебагере выглядит очень странновато…

Теперь должно работать

05.11.2013 1:03:18
Locky

Locky

Киев

Locky

Locky

Киев

К сожалению не работает… ошибка не в преобразовании строки в число… толи не то с индексацией массива, толи он заполнен не так…

возможно я ошибаюсь… вроде бы работает как надо… протестирую побольше

спасибо за помощь!

05.11.2013 1:27:08
admin

admin

Команда Russian AI Cup

kirjushyk

kirjushyk

Харьков

Можете выводить ошибки компиляции? А то стратегия не добавляется с ошибкой компиляции, я уже всё у себя проверил, на разных компиляторах, с -Wall.

Нажмите в лейбл “Ошибка компиляции” на странице ваших стратегий.

05.11.2013 1:42:49
kirjushyk

kirjushyk

Харьков

А, это вы, разбойники, объявление Move заменили в хидэре! :)

05.11.2013 1:43:00
SladeThe

SladeThe

Команда Russian AI Cup

kirjushyk

kirjushyk

Харьков

Можете выводить ошибки компиляции? А то стратегия не добавляется с ошибкой компиляции, я уже всё у себя проверил, на разных компиляторах, с -Wall.

А разве сейчас не выодится? Нажмите на вердикт.

P.S. Мы переработали клиент для C++ под другой Code Style. Смотрите обновление постов Языковые пакеты и Окрытый бета-тест. Вероятно, дело в этом.

05.11.2013 1:43:24
kirjushyk

kirjushyk

Харьков

Нажмите в лейбл “Ошибка компиляции” спасибо!

05.11.2013 1:43:39
kirjushyk

kirjushyk

Харьков

Ой, так вы вообще всё поменяли! :) Ну и славненько, а то кое_где_так, КоеГдеТак было.

05.11.2013 1:58:39
SladeThe

SladeThe

Команда Russian AI Cup

Hamster

Hamster

Мелитополь

Если я не ошибаюсь, то баг. Бой №1166. Ход 15. Остался один мой командир, поэтому проверить легко. World.GetBonuses при локальном повторе (очевидно и при игре) возвращает пустой массив, хотя визуально на карте их дофига. А вообще массив бонусов пустой, начиная с третьего хода

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

05.11.2013 1:59:49
Hamster

Hamster

Мелитополь

SladeThe

SladeThe

Команда Russian AI Cup

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

упс… спасибо!

05.11.2013 2:00:34
SladeThe

SladeThe

Команда Russian AI Cup

Подскажите пожалуйста, скачиваю C# пакет, запускаю солюшн в студии и не получается запустить проект, вылетает exception: Необработанное исключение: System.Net.Sockets.SocketException: Подключение не ус тановлено, т.к. конечный компьютер отверг запрос на подключение 127.0.0.1:31000 в System.Net.Sockets.TcpClient..ctor(String hostname, Int32 port) в Com.CodeGame.CodeTroopers2013.DevKit.CSharpCgdk.RemoteProcessClient..ctor(S tring host, Int32 port) в d:\csharp-cgdk\RemoteProcessClient.cs:строка 22 в Com.CodeGame.CodeTroopers2013.DevKit.CSharpCgdk.Runner..ctor(String[] args) в d:\csharp-cgdk\Runner.cs:строка 24 в Com.CodeGame.CodeTroopers2013.DevKit.CSharpCgdk.Runner.Main(String[] args) в d:\csharp-cgdk\Runner.cs:строка 18 …

Сперва нужно запустить LocalRunner. Именно к нему пытается коннектиться клиент. Клиент это только ваша стратегия, игрового движка в нём нет. Если же вы так и делаете, то возможно дело в файрволле или чём-то ещё.

05.11.2013 2:04:02
SashaSm
SladeThe

SladeThe

Команда Russian AI Cup

Сперва нужно запустить LocalRunner. Именно к нему пытается коннектиться клиент. Клиент это только ваша стратегия, игрового движка в нём нет. Если же вы так и делаете, то возможно дело в файрволле или чём-то ещё.

Уже разобрался :) Неправильно запускал localrunner. Спасибо!

05.11.2013 2:07:25
SladeThe

SladeThe

Команда Russian AI Cup

ViktorM

ViktorM

NVidia

Новый кодстайл для С++ ужасающий и нечитаемый. Зачем экономить на открывающих фигурных скобках и не переносить на новую строку? Недостатка в строках вроде не читается. Ладно в MyStrategy.cpp я ещё переделаю в более удобный но мне надо ещё и остальной код смотреть.

Прошлый кодстайл многим не нравился, и нас неоднократно просили его переделать. Мы решили сделать код C++ максимально похожим на Java, чтобы участникам проще было ориентироваться как в JavaDocs, так и в клиенте. Мы понимаем, что у каждого стиля есть как свои сторонники, так и противники, но интуитивно (без чтения Code Style Guide) было непонятно, почему разные функции пишутся в разных регистрах. Сейчас такого противоречия нет.

Что же касается экономии строк, то это действительно очень удобно, если, конечно, у вас не HD-монитор, повёрнутый на 90°.

05.11.2013 10:58:48
Gvoin

Gvoin

Не могу

xelai

xelai

Когалым

404 при попытке скачать хоть какой-нибудь языковой пакет.

попробуй так http://russianaicup.ru/s/1383607732313/assets/cgdks/cpp-cgdk.zip?rnd
или так
Ссылка

05.11.2013 13:44:55
admin

admin

Команда Russian AI Cup

Elsedar

Elsedar

ИжГТУ

Почему бы не добавить флаг -std=c++0x?

К сожалению, С++11 обратно не совместим с обширно используемыми версиями C++. Например, используемая библиотека csimplesocket (by Mark Carrier) не компилируется в C++11. По возможности, C++11 будет поддержан, но это не просто добавление флага.

05.11.2013 20:04:23
admin

admin

Команда Russian AI Cup

xdrobx

xdrobx

ВМК МГУ имени Ломоносова

VS выдает в World.cpp в ф-ции is_visible() : min - identifier is undefined

Скачайте актуальную версию С++-пакета. Какая версия Visual Studio?

05.11.2013 20:11:31
enot

enot

SPbSU

В третьем питоне та же опечатка – shot_cost вместо shoot_cost.

05.11.2013 20:15:05
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

enot

enot

SPbSU

В третьем питоне та же опечатка – shot_cost вместо shoot_cost.

я думаю это уже не особо принципиально, только всем рефакторить прийдется если поменяют

05.11.2013 20:22:06
imbeat

imbeat

МИЭТ

enot

enot

SPbSU

В третьем питоне та же опечатка – shot_cost вместо shoot_cost.

в c# та же опечатка. уже писал про нее - оставили без ответа.

05.11.2013 20:24:14
udalov

udalov

JetBrains

Цена по-английски cost, выстрел shot. Цена выстрела – cost of a shot, или shot cost. Никакой опечатки нет.

05.11.2013 20:29:16
admin

admin

Команда Russian AI Cup

imbeat

imbeat

МИЭТ

в c# та же опечатка. уже писал про нее - оставили без ответа.

На самом деле и shot_cost почти подходит - “стоимость выстрела”. Сомнения в целесообразности исправления были вызваны отсутствием статической типизации в Питоне. Так, невнимательный участник может использовать старый код и получить неправильное поведение в боях.

05.11.2013 20:30:43
xdrobx

xdrobx

ВМК МГУ имени Ломоносова

admin

admin

Команда Russian AI Cup

Скачайте актуальную версию С++-пакета. Какая версия Visual Studio?

Сегодня качал, VS 2013

05.11.2013 20:33:17
Locky

Locky

Киев

и опять питон. У меня пишет ошибка верификации. Хотя локально работает без падений. Боя тестового нет. Как понять что именно не так с точки зрения сервера? Как узнать например, что быстродействия на такт не хватает? А учитывая что питон не быстрый - то вполне может и тормозить.

05.11.2013 20:33:32
Locky

Locky

Киев

на всякий случай для пользователей питона: т.к. у нас не компилится и довольно много отсвует проверок, то при заливке учитывайте, что проверка будет на 5 типа солдат, т.е. если есть код a[me.type] и размер массива 3, то стратегия не зальется.

05.11.2013 21:23:05
cNoNim

cNoNim

DataArt

admin

admin

Команда Russian AI Cup

Скачайте актуальную версию С++-пакета. Какая версия Visual Studio?

VS выдает в World.cpp в ф-ции is_visible() : min - identifier is undefined Скачайте актуальную версию С++-пакета. Какая версия Visual Studio?

вообще-то min объявлен в С++ в хидере algorithm который не включен в World.cpp

06.11.2013 12:35:38
SladeThe

SladeThe

Команда Russian AI Cup

“На данный момент мы поддерживаем языки” - есть варианты расширения списка? Haskell планируется?

Создание клиента для каждого языка является очень трудоёмкой задачей, тем более, что не все поддерживаемые языки являются для команды разработчиков «родными». Поэтому мы не планируем расширять набор своими силами. Если у вас хватит энтузиазма переписать клиент на Haskell по образцу уже существующих, то с вероятностью 90% мы его поддержим.

06.11.2013 12:40:14
cNoNim

cNoNim

DataArt

извиняюсь увидел changelog

06.11.2013 12:40:27
admin

admin

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

вообще-то min объявлен в С++ в хидере algorithm который не включен в World.cpp

Да, проблема уже выявлена и исправление внесено в код. Обновим пакет как только внесем все текущие запланированные изменения пакета.

06.11.2013 13:15:54
kirill_

kirill_

Минск

bash compile-g++.sh пишет много ошибок в MAC OS X(10.9).

06.11.2013 17:27:11
enot

enot

SPbSU

Добавьте, пожалуйста, какой-нибудь makefile в клиент с++. Компиляция всего пакета с нуля каждый раз делается очень долго.

06.11.2013 19:33:08
chianti

Для Java-пакета, можете сделать доступ к полю World.cellVisibilities? Например таким способом: public boolean[][][][][] getCellVisibilities() { return cellVisibilities; } Не всегда удобно пользоваться функцией isVisible(…)

06.11.2013 20:29:02
cNoNim

cNoNim

DataArt

если еще что нибудь будете править… рассмотрите вот эти правки https://gist.github.com/cNoNim/7340869 если оставлять так как есть то World и PlayerContext не являются POD типами и для них не создается автоматически оператор присваивания… не знаю критично это для кого нить или нет, но все же… + я бы посоветовал, все перечисления объявить как char, например

enum CellType : char

для экономии памяти, + попробуйте собрать пакет для С++ в студии с варнингами 4 уровня, многие перечисляемые мной моменты вылезут так же я бы ушел во всех местах от вектора, векторов не кашерно это все ни какой проблемы хранить cells в сплошном векторе нету

ну и еще один момент…

я конечно не разбирался, но не проще ли хранить

cellVisibilities

как

std::vector<CellType> 

и чуточку подправить функцию isVisible

06.11.2013 21:58:34
cNoNim

cNoNim

DataArt

и еще совсем забыл можно к методам

isHolding*()

добавить

isHolding(BonusType type);

?

06.11.2013 22:24:43
kostya93

kostya93

Санкт-Петербург

скачал последний языковой пакет c++, vs2010, локально все работает, при попытке загрузить сюда пишет “ошибка компиляции”, не подскажите как такое возможно ?!

06.11.2013 22:36:22
HiVaccessdenied

HiVaccessdenied

ООО "Мера НН"

kostya93

kostya93

Санкт-Петербург

скачал последний языковой пакет c++, vs2010, локально все работает, при попытке загрузить сюда пишет “ошибка компиляции”, не подскажите как такое возможно ?!

Очень возможно, не студией ведь на сервере собирается. Попробуйте, как указано, g++ (GCC) 4.7.1.

06.11.2013 23:04:09
HiVaccessdenied

HiVaccessdenied

ООО "Мера НН"

kostya93

kostya93

Санкт-Петербург

скачал последний языковой пакет c++, vs2010, локально все работает, при попытке загрузить сюда пишет “ошибка компиляции”, не подскажите как такое возможно ?!

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

06.11.2013 23:05:05
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

если еще что нибудь будете править… рассмотрите вот эти правки https://gist.github.com/cNoNim/7340869 если оставлять так как есть то World и PlayerContext не являются POD типами и для них не создается автоматически оператор присваивания… не знаю критично это для кого нить или нет, но все же… + я бы посоветовал, все перечисления объявить как char, например …

«рассмотрите вот эти правки »

Не критично, но, если будем вносить правки в клиент, рассмотрим.

«я бы посоветовал, все перечисления объявить как char»

Это уже микрооптимизация. При 600 элементов и лимите памяти в 256 Мб выигрыш стремится к нулю.

«никакой проблемы хранить cells в сплошном векторе нету»

Это неудобно для участников: вместо передачи x и y им придётся каждый раз конвертировать индексы.

« не проще ли хранить cellVisibilities как std::vector и чуточку подправить функцию isVisible»

А вот с этим непонятно. Каким таким образом мы булевы заменим на CellType?

07.11.2013 0:13:55
baho

baho

3Planesoft

Очень нужны конструкторы по умолчанию для model::Trooper, model::Bonus. Сейчас приходится извращаться, чтобы сделать поле с ними, чтобы потом сохранять туда локальную копию. Можно просто наставить дефолтных значений в существующие конструкторы.

07.11.2013 0:22:00
cNoNim

cNoNim

DataArt

SladeThe

SladeThe

Команда Russian AI Cup

«рассмотрите вот эти правки » Не критично, но, если будем вносить правки в клиент, рассмотрим. «я бы посоветовал, все перечисления объявить как char» Это уже микрооптимизация. При 600 элементов и лимите памяти в 256 Мб выигрыш стремится к нулю. «никакой проблемы хранить cells в сплошном векторе нету» …

А вот с этим непонятно. Каким таким образом мы булевы заменим на CellType?

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

но вот какой получается карта видимости из точки рядом с низким препятствием

https://gist.github.com/cNoNim/7343626

где:

2 это standing, т.е. не видно даже стоящего

1 это kneeling, т.е. видно только стоящего

0 это prone, т.е. не видно только лежащего

-1 видно всех

сравнив это значение с

    int minStanceIndex = min(viewerStance, objectStance);

можно делать вывод о видимости

07.11.2013 0:38:48
cNoNim

cNoNim

DataArt

Это неудобно для участников: вместо передачи x и y им придётся каждый раз конвертировать индексы. замените getCells на

getCell(int x, int y)

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

07.11.2013 0:42:54
cNoNim

cNoNim

DataArt

прошлый коментарий обрезался не правильно, ни как не могу привыкнуть

Это неудобно для участников: вместо передачи x и y им придётся каждый раз конвертировать индексы.

замените getCells на …

07.11.2013 0:45:28
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

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

Ага, понятно. Но, раз уж мы говорим о микрооптимизации, то vector внутри себя хранится гораздо более эффективно, чем vector.

Я не вижу каких-либо серьёзных аргументов в пользу переделки: +1% скорости или -1% памяти не учитывается. А усилия приложить придётся.

07.11.2013 0:54:51
MrDindows

MrDindows

Looksery

cNoNim

cNoNim

DataArt

прошлый коментарий обрезался не правильно, ни как не могу привыкнуть замените getCells на …

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

07.11.2013 0:55:33
SladeThe

SladeThe

Команда Russian AI Cup

SladeThe

SladeThe

Команда Russian AI Cup

Ага, понятно. Но, раз уж мы говорим о микрооптимизации, то vector внутри себя хранится гораздо более эффективно, чем vector. Я не вижу каких-либо серьёзных аргументов в пользу переделки: +1% скорости или -1% памяти не учитывается. А усилия приложить придётся.

vector < bool > чем vector < enum >

07.11.2013 0:56:02
cNoNim

cNoNim

DataArt

MrDindows

MrDindows

Looksery

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

а в чем усложнение то, правда считаешь, что переход по массиву массивов дешевле чем посчитать индекс (одно сложение и одно умножение)?

07.11.2013 1:00:07
Locky

Locky

Киев

к чему вообще все эти микрооптимизации? питон изначально проигрывает в быстродействии и оптимизации в разы остальным языкам, но даже он работает достаточно быстро и эффективно. кстати в питоне cell_visibilities не 5ти мерный массив а одномерный :)

07.11.2013 1:13:46
cNoNim

cNoNim

DataArt

хз… все этим ‘микрооптимизации’ выльются в ускорение обработки боя в первую очередь на сервере

потому что я думаю на сервере все так же туго с этими ‘микрооптимизациями’

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

07.11.2013 1:18:17
Ministr

Ministr

СПбНИУ ИТМО

запускаю compile-java.sh, на выход получаю java-cgdk.jar. Далее пытаюсь его запустить java -jar java-cgdk.jar и тут “no main manifest attribute, in java-cgdk.jar”. Что я делаю не так ?

07.11.2013 1:50:05
Baster

Baster

Саратовский ГУ

Hamster

Hamster

Мелитополь

Поясните, пжалста причину сообщения об ошибке компилляции Free Pascal Compiler version 2.6.2 [2013/02/12] for i386 *** MyStrategy.pas(769,33) Error: identifier idents no member “GetShotCost” Речь идет о строке if me.GetActionPoints >= me.GetShotCost then которая ранее успешно компилировалась на сервере и вроде бы как соответствует документации А “me” тут - procedure TMyStrategy.Move(me: TTrooper;

У меня та же ошибка, только на C++

07.11.2013 1:56:43
admin

admin

Команда Russian AI Cup

Baster

Baster

Саратовский ГУ

У меня та же ошибка, только на C++

Обновите языковой пакет.

07.11.2013 2:12:21
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

и да я бы таки начал с того, что не передавал cells и cellVisibilities каждый move, достаточно в начале игры… но там сами смотрите

Они и не передаются каждый move.

07.11.2013 11:59:57
SladeThe

SladeThe

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

как бы если сделать TrooperStance чаром, то bool ни как эффективней храниться не может… и в место 1 мегобайта передаваемых данных между ранером и стратегией вы будете передавать в 3 раза меньше

vector < bool > хранит данные побитово.

07.11.2013 12:01:12
Lord_F

Lord_F

Гимназия №1

egor-belikov

egor-belikov

МФТИ

Я не очень понимаю. Можно ли на Python 2 использовать те методы, которые описаны в документации (me.getActionPoints), или нужно писать так, как указано в примере (me.action_points)?

Вроде же написано, что по умолчанию в документации все написано для языка Java.

07.11.2013 12:45:58
SladeThe

SladeThe

Команда Russian AI Cup

egor-belikov

egor-belikov

МФТИ

Я не очень понимаю. Можно ли на Python 2 использовать те методы, которые описаны в документации (me.getActionPoints), или нужно писать так, как указано в примере (me.action_points)?

В Питоне нет инкапсуляции, поэтому смысла в методах-аксессорах для полей никакого.

Если вы откроете файл Trooper.py в вашем клиенте, то увидите, что никакого метода getActionPoints там нет.

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

07.11.2013 12:54:07
SladeThe

SladeThe

Команда Russian AI Cup

Hamster

Hamster

Мелитополь

6 ноября 15:30: Обновлены все клиенты. Переименован метод Trooper.getShotCost -> getShootCost. Вот нафига это нужно было?

Многие сочли это опечаткой и просили исправить.

07.11.2013 12:55:38
SladeThe

SladeThe

Команда Russian AI Cup

enot

enot

SPbSU

Зачем в с++ делать переменные .x и .y в классе Unit приватными? И во многих других местах тоже. Из-за этого приходится везде писать getX(), getY(), что делает код менее читаемым и делает лишний вызов функций.

Это всё-таки не переменные, а поля. А публичные поля противоречат концепции ООП и практически всем популярным стайл-гайдам. Так что использование аксессоров как раз наиболее правильный вариант.

Конструкторы по умолчанию, скорее всего, добавим.

07.11.2013 13:01:49
Ixanezis

Ixanezis

Яндекс

Может я что-то не так делаю, но под mac os и windows я получаю одинаковые ошибки при запуске своей стратегии (python2):

File "Runner.py", line 36, in run
    strategies[player_trooper.teammate_index].move(player_trooper, player_context.world, game, move)
AttributeError: Move instance has no __call__ method

07.11.2013 14:16:08
cNoNim

cNoNim

DataArt

SladeThe

SladeThe

Команда Russian AI Cup

Они и не передаются каждый move.

ну т.е. не передавать каждый ход… они ведь не меняются между ходами, хотя может есть нюансы я не в курсе

07.11.2013 14:26:24
cNoNim

cNoNim

DataArt

SladeThe

SladeThe

Команда Russian AI Cup

vector < bool > хранит данные побитово.

но передаете то вы их чарами…

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

07.11.2013 14:31:40
admin

admin

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

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

Эти матрицы передаются единожды в начале игры. Предлагаемая оптимизация пренебрежимо мало увеличит общую пропускную способность тестирования и поэтому не планируется к внедрению.

07.11.2013 15:23:05
cNoNim

cNoNim

DataArt

Эти матрицы передаются единожды в начале игры

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

07.11.2013 16:15:39
baho

baho

3Planesoft

cNoNim

cNoNim

DataArt

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

С самого начала в пакете C++ переменная cellVisibilities кешировалась, читалась только при первом обращении.

код: vector& RemoteProcessClient::readCellVisibilities() { if (cellVisibilities != NULL) { return *cellVisibilities; } … }

07.11.2013 19:04:18
Locky

Locky

Киев

есть предложение. При заливке стратегии добавить поле коментарий, который виден только автору. Чтобы в него вписывать ключевые моменты, что изменилось. Поле необязательное. Сугубо информационное для автора.

07.11.2013 19:35:46
Elsedar

Elsedar

ИжГТУ

Locky

Locky

Киев

есть предложение. При заливке стратегии добавить поле коментарий, который виден только автору. Чтобы в него вписывать ключевые моменты, что изменилось. Поле необязательное. Сугубо информационное для автора.

Осспади, что мешает завести репозиторий?

08.11.2013 0:05:34
Locky

Locky

Киев

Elsedar

Elsedar

ИжГТУ

Осспади, что мешает завести репозиторий?

Ничего не мешает Но лишнее удобство и ничего более

08.11.2013 1:55:13
imbeat

imbeat

МИЭТ

Locky

Locky

Киев

есть предложение. При заливке стратегии добавить поле коментарий, который виден только автору. Чтобы в него вписывать ключевые моменты, что изменилось. Поле необязательное. Сугубо информационное для автора.

поддерживаю.

08.11.2013 6:22:27
DVS

DVS

здесь может быть Ваша компания! :)

Trooper.ShotCost ошибка компиляции на сайте, локально компилируется

08.11.2013 11:35:51
admin

admin

Команда Russian AI Cup

DVS

DVS

здесь может быть Ваша компания! :)

Trooper.ShotCost ошибка компиляции на сайте, локально компилируется

Вы используете устареший языковой пакет — скачайте новый. Метод был переименован для единообразия в getShootCost.

08.11.2013 11:39:32
DVS

DVS

здесь может быть Ваша компания! :)

переименовал в Trooper.ShootCost , скомпилировалось, но вышла ошибка верификации. скаяал новый пакет в 11:23, там нет getShootCost у меня C#

08.11.2013 11:51:09
DVS

DVS

здесь может быть Ваша компания! :)

Как можно узнать по какой причине стратегия не прошла верификацию?

08.11.2013 12:00:48
admin

admin

Команда Russian AI Cup

DVS

DVS

здесь может быть Ваша компания! :)

переименовал в Trooper.ShootCost , скомпилировалось, но вышла ошибка верификации. скаяал новый пакет в 11:23, там нет getShootCost у меня C#

Конечно, getShootCost в языковом пакете для C# нет. В этом языки приняты properties, поэтому используется такой код:

        public int ShootCost
        {
            get { return shootCost; }
        }

08.11.2013 12:04:51
admin

admin

Команда Russian AI Cup

DVS

DVS

здесь может быть Ваша компания! :)

переименовал в Trooper.ShootCost , скомпилировалось, но вышла ошибка верификации. скаяал новый пакет в 11:23, там нет getShootCost у меня C#

У вас ошибки в стратегии, ответил подробнее личным сообщением.

08.11.2013 12:09:45
sender-mobile

sender-mobile

Москва

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

08.11.2013 12:39:39
DVS

DVS

здесь может быть Ваша компания! :)

можно ли как нибуть узнать сколько процессорного времени и памяти расходует стратегия на сервере?

08.11.2013 15:40:00
rattleback

rattleback

Петрозаводск

Elsedar

Elsedar

ИжГТУ

Осспади, что мешает завести репозиторий?

Например отмечать серьезные изменения чтобы потом легче было создавать бои со старыми версиями стратегий

08.11.2013 21:15:59
SladeThe

SladeThe

Команда Russian AI Cup

EPJ

EPJ

Виснет проект на функции vector RemoteProcessClient::readBytes(unsigned int byteCount) в случае, если запускать local-runner-sync.bat. При этом отображается только отряд “KeyboardPlayer” которым можно управлять. local-runner.bat работает нормально.

Разумеется, он не получит данных, пока не сходит KeyboardPlayer.

08.11.2013 23:06:01
asdForever

asdForever

Kaspi Bank

Может быть я чего-то не понял, но как использовать, например, аптечку? В методах trooper есть возможность только проверить ее наличие. Спасибо

09.11.2013 9:09:38
megaterik

megaterik

Белорусский Государственный Университет

asdForever

asdForever

Kaspi Bank

Может быть я чего-то не понял, но как использовать, например, аптечку? В методах trooper есть возможность только проверить ее наличие. Спасибо

move.setX(friend.getX()); move.setY(friend.getY()); move.setAction(ActionType.USE_MEDIKIT);

Где move – объект класса Move, передаваемый последним параметром в move()

09.11.2013 11:05:30
x-and

x-and

Севастополь

Java, Возможно вы подумаете над тем, чтоб Strategy и MyStrategy находились в любом именованом пакете? Использовать пакеты со своими названиями нельзя. Хотелось использовать static import , при разделении функциональности, но не могу этого позволить, из-за ограничения на дефолтный пакет без имени.

09.11.2013 20:33:34
Sonyk

Sonyk

Университет ИТМО

Будут ли закомментированы методы классов c#. Например в jave увидел полноценное описание методов…

09.11.2013 21:10:02
nop

nop

БГУ

SladeThe

SladeThe

Команда Russian AI Cup

vector < bool > хранит данные побитово.

Вы понимаете, что индексирование на одно лишнее измерение, а затем извлечение бита требует значительно больше процессорного времени, чем сравнение байта в памяти с заданным числом? Разница же по памяти чуть более чем двойная, так как мы заменяем 3 бита на 1 байт и вряд ли лишнего мегабайта, который в современных процессорах помещается в L2, будет жалко, если мы обменяем его на значительное увеличение скорости.

09.11.2013 21:31:07
SladeThe

SladeThe

Команда Russian AI Cup

nop

nop

БГУ

Вы понимаете, что индексирование на одно лишнее измерение, а затем извлечение бита требует значительно больше процессорного времени, чем сравнение байта в памяти с заданным числом? Разница же по памяти чуть более чем двойная, так как мы заменяем 3 бита на 1 байт и вряд ли лишнего мегабайта, который в современных процессорах помещается в L2, будет жалко, если мы обменяем его на значительное увеличение скорости.

Мы не будем заниматься микрооптимизацией, которая в определённых случаях ускоряет быстродействие на проценты. В любом случае, здесь у каждого своё мнение, и это бесконечный процесс, даже если заниматься только C++. А это не единственный язык. Если вы докажете (с данными профайлера), что да, есть такое узкое место, которое легко поправить и получить существенный бонус производительности, то мы это сделаем.

Расширения карты также не будет, так как часть карт уже нарисована.

09.11.2013 22:26:14
nop

nop

БГУ

SladeThe

SladeThe

Команда Russian AI Cup

Мы не будем заниматься микрооптимизацией, которая в определённых случаях ускоряет быстродействие на проценты. В любом случае, здесь у каждого своё мнение, и это бесконечный процесс, даже если заниматься только C++. А это не единственный язык. Если вы докажете (с данными профайлера), что да, есть такое узкое место, которое легко поправить и получить существенный бонус производительности, то мы это сделаем. …

Я просил не карту расширить, а добавить два неиспользуемых столбца к массиву и вычислять адрес, используя константы, а не переменные. Профайлер у меня стоит только на работе и домой ставить я его не буду, но в теории, в моей версии, каждое умножение, использующееся для индексации делается через 1 LEA и 1 SHL . А у вас - по несколько imul. Это не “проценты”, это “в разы”

09.11.2013 22:31:44
SladeThe

SladeThe

Команда Russian AI Cup

nop

nop

БГУ

Я просил не карту расширить, а добавить два неиспользуемых столбца к массиву и вычислять адрес, используя константы, а не переменные. Профайлер у меня стоит только на работе и домой ставить я его не буду, но в теории, в моей версии, каждое умножение, использующееся для индексации делается через 1 LEA и 1 SHL . А у вас - по несколько imul. Это не “проценты”, это “в разы”

Под процентами я имею в виду суммарное время работы. Ускорение “в разы” операции, занимающей 0.1% (условно) от общего времени, ничего не даст.

09.11.2013 22:44:53
nakilon

nakilon

Москва

И опять без Ruby _–

10.11.2013 0:21:46
yzach

Есть информация о поддержке numpy в пакете python?

10.11.2013 0:44:39
BoxAtBox

BoxAtBox

Ростов-на-Дону

Ахахах. Спасибо, что в паскалевском пакете вы завели константу FREE.

10.11.2013 12:37:21
kipar

kipar

ООО Доминанта

BoxAtBox

BoxAtBox

Ростов-на-Дону

Ахахах. Спасибо, что в паскалевском пакете вы завели константу FREE.

Можно писать WorldControl.FREE.

А вообще - в паскалевском пакете нет ни перечислений, ни свойств. Так и так все во врапперы оборачивать.

10.11.2013 12:41:52
BoxAtBox

BoxAtBox

Ростов-на-Дону

kipar

kipar

ООО Доминанта

Можно писать WorldControl.FREE. А вообще - в паскалевском пакете нет ни перечислений, ни свойств. Так и так все во врапперы оборачивать.

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

10.11.2013 12:49:38
BoxAtBox

BoxAtBox

Ростов-на-Дону

Ребяты, а как определить в какую сторону смотрит вражеский боец? :D

10.11.2013 14:27:21
kipar

kipar

ООО Доминанта

BoxAtBox

BoxAtBox

Ростов-на-Дону

Ребяты, а как определить в какую сторону смотрит вражеский боец? :D

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

10.11.2013 14:28:24
BoxAtBox

BoxAtBox

Ростов-на-Дону

kipar

kipar

ООО Доминанта

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

Ну как сказать. Можно же определить из какой клетки он только что перешел, зная направление.

10.11.2013 14:40:01
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

BoxAtBox

BoxAtBox

Ростов-на-Дону

Ну как сказать. Можно же определить из какой клетки он только что перешел, зная направление.

когда вам состояние мира возвращают там нигде не указано направление. только при просмотре боя визуально это видно

10.11.2013 14:46:27
cNoNim

cNoNim

DataArt

admin

admin

Команда Russian AI Cup

К сожалению, С++11 обратно не совместим с обширно используемыми версиями C++. Например, используемая библиотека csimplesocket (by Mark Carrier) не компилируется в C++11. По возможности, C++11 будет поддержан, но это не просто добавление флага.

только что попробовал добавить в сборку с помощью GCC флаг -std=c++11

ни каких ошибок не обнаружил,

поддержите пожалуйста флаг С++11

на счет того что С++11 не совместим, как то выглядит не очень правдоподобно, хотя возможно есть нюансы

10.11.2013 20:52:10
cNoNim

cNoNim

DataArt

хотя если имеется ввиду что код С++11 не соберется на старом компиляторе, то это как бы очевидно…

но главное ведь, что бы у вас собиралось, а допустим GCC прожует больше языковых конструкций, чем VС++ последней версии

и можно спокойно писать код в VC++ он будет собираться с помощью GCC

а то сейчас приходится себя ограничивать не понятно зачем…

писать код в VC++ 2013 и не использовать хотя бы auto или range based for

10.11.2013 21:11:12
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

cNoNim

cNoNim

DataArt

хотя если имеется ввиду что код С++11 не соберется на старом компиляторе, то это как бы очевидно… но главное ведь, что бы у вас собиралось, а допустим GCC прожует больше языковых конструкций, чем VС++ последней версии и можно спокойно писать код в VC++ он будет собираться с помощью GCC а то сейчас приходится себя ограничивать не понятно зачем… …

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

10.11.2013 21:27:47
urevic

urevic

Бургас

Есть информация о поддержке numpy в пакете python?

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

10.11.2013 21:33:22
...............

Не могу понять как получить значение текущего игрового цикла, нашел только Game::getMoveCount(). Или придется самому считать?

10.11.2013 21:44:42
cNoNim

cNoNim

DataArt

World::getMoveIndex

10.11.2013 21:49:57
nakilon

nakilon

Москва

urevic

urevic

Бургас

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

  1. Раз нужно доустанавливать – значит, не стандартное.
  2. Кто-то получает профит от сей из-за производительности. А ты получаешь профит от питона из-за скорости разработки.

10.11.2013 21:50:19
ipavlov

ipavlov

МШП

Хм. Локально на Visual Studio компилируется код: move.setAction(ActionType::MOVE); На сервере - нет. Понятно, что можно убрать ActionType:: и все скомпилируется, но на мой взгляд с ним код более читабельный. Можно с этим что-нибудь сделать?

10.11.2013 21:56:58
cNoNim

cNoNim

DataArt

ipavlov

ipavlov

МШП

Хм. Локально на Visual Studio компилируется код: move.setAction(ActionType::MOVE); На сервере - нет. Понятно, что можно убрать ActionType:: и все скомпилируется, но на мой взгляд с ним код более читабельный. Можно с этим что-нибудь сделать?

ActionType::MOVE

это не по стандарту… да даже в новом стандарте это верно только для enum class… но в целом если бы был поддержан С++11 можно было бы использовать и enum class. пока же только через костыли

10.11.2013 21:59:42
cNoNim

cNoNim

DataArt

если, что

я не прошу переписывать пакеты на С++11

этого не нужно, просто добавить флаг и будет ок

10.11.2013 22:00:40
urevic

urevic

Бургас

nakilon

nakilon

Москва

  Раз нужно доустанавливать – значит, не стандартное.     Кто-то получает профит от сей из-за производительности. А ты получаешь профит от питона из-за скорости разработки.  
  1. Если бы Гвидо когда-то не сказал нет, то было бы стандартное. Ну по крайней мере numpy. У него были свои мотивы, но тут они ни при чем.
  2. В реальной разработке я всегда могу получать лучшее от двух миров, переписывая узкие места с использованием нумпая или делая расширения на си, почему тут должно быть по-другому?
  3. На си можно в один файл со стратегией впихнуть какой-то уже готовый хорошо оптимизированный алгоритм, реализованный на сях же. Да любую библиотеку туда впихнуть можно, обработав напильником. Кстати, чем это отличается от установки чего-то нестандартного на сервере для всех? А вот в питоновский файл я расширение на си не впихну никак.

11.11.2013 0:37:53
nop

nop

БГУ

BoxAtBox

BoxAtBox

Ростов-на-Дону

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

Не обижайте, пожалуйста, C++ программистов, они плюются на качество и “удобство” API-кода своего языкового пакета не меньше вас, еще с прошлого года. Джава - базовый язык у организаторов.

11.11.2013 1:10:26
nop

nop

БГУ

nop

nop

БГУ

Не обижайте, пожалуйста, C++ программистов, они плюются на качество и “удобство” API-кода своего языкового пакета не меньше вас, еще с прошлого года. Джава - базовый язык у организаторов.

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

11.11.2013 1:18:01
bovykingmail.co

А почему вообще не сделать, как в google ai challenge было: все общение алгоритма с программой - через stdin/out? Это снимает кучу проблем с пакетом: кому не нравилась реализация - переписывали сами. И парк языков был намного шире.

11.11.2013 2:13:48
MrDindows

MrDindows

Looksery

А почему вообще не сделать, как в google ai challenge было: все общение алгоритма с программой - через stdin/out? Это снимает кучу проблем с пакетом: кому не нравилась реализация - переписывали сами. И парк языков был намного шире.

По-моему так проще, как есть сейчас.

Да и переписать всё со своими классами вам никто не запрещает, а исходный интерфейс использовать лишь как ввод/вывод информации, при чём намного удобнее, чем через stdin/stdout.

11.11.2013 2:20:22
cNoNim

cNoNim

DataArt

MrDindows

MrDindows

Looksery

По-моему так проще, как есть сейчас. Да и переписать всё со своими классами вам никто не запрещает, а исходный интерфейс использовать лишь как ввод/вывод информации, при чём намного удобнее, чем через stdin/stdout.

+1, так и делаю

11.11.2013 2:32:51
admin

admin

Команда Russian AI Cup

А почему вообще не сделать, как в google ai challenge было: все общение алгоритма с программой - через stdin/out? Это снимает кучу проблем с пакетом: кому не нравилась реализация - переписывали сами. И парк языков был намного шире.

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

Относительно google ai challenge напомню, что там были большие проблемы со скоростью тестирования.

11.11.2013 2:43:51
admin

admin

Команда Russian AI Cup

nop

nop

БГУ

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

Чем принципиально отличается использование API для C++ от, например, Java? Анализ стратегий участников не выявил существенных отличий в использовании.

11.11.2013 2:46:17
MrDindows

MrDindows

Looksery

admin

admin

Команда Russian AI Cup

  Взаимодействие процессов через пайпы (во всяком случае в Windows, но, возможно и всюду) значительно более тормозное чем через сокеты.     Общение через сокеты дает возможность без проблем использовать бинарный протокол.     Случайный вывод (например, какой-то в редком случае отладочный вывод) в stdout не сломает протокол и не приведет к тому, что стратегия будет считаться упавшей. ...

Кстати, скорость тестирования боёв с солдатами вроде ж как намного быстрее, чем была у танков. Не планируется в связи с этим уменьшить интервалы между боями в песочнице?

11.11.2013 2:48:34
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

MrDindows

MrDindows

Looksery

Кстати, скорость тестирования боёв с солдатами вроде ж как намного быстрее, чем была у танков. Не планируется в связи с этим уменьшить интервалы между боями в песочнице?

Плюсую. К 20 минутам уже привыклось. Да и даст более точные результаты по идее

11.11.2013 2:57:47
HiVaccessdenied

HiVaccessdenied

ООО "Мера НН"

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Плюсую. К 20 минутам уже привыклось. Да и даст более точные результаты по идее

Раз в 20 минут вообще было шикарно.

11.11.2013 6:09:34
bovykingmail.co
admin

admin

Команда Russian AI Cup

  Взаимодействие процессов через пайпы (во всяком случае в Windows, но, возможно и всюду) значительно более тормозное чем через сокеты.     Общение через сокеты дает возможность без проблем использовать бинарный протокол.     Случайный вывод (например, какой-то в редком случае отладочный вывод) в stdout не сломает протокол и не приведет к тому, что стратегия будет считаться упавшей. ...

В google ai challenge из-за недостатка мощности сервера (тоже примерно раз в час игра) появились tcp-серверы.

11.11.2013 6:28:19
HiVaccessdenied

HiVaccessdenied

ООО "Мера НН"

HiVaccessdenied

HiVaccessdenied

ООО "Мера НН"

Раз в 20 минут вообще было шикарно.

Создал голосовалку насчет частоты боев. Прошу :-) http://russianaicup.ru/forum/index.php?topic=48.0

11.11.2013 6:54:49
winger

winger

Facebook

Я написал обвязку для языка D по аналогии с C++. Есть ли шанс что будет добавлена его поддержка?

11.11.2013 13:13:07
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

winger

winger

Facebook

Я написал обвязку для языка D по аналогии с C++. Есть ли шанс что будет добавлена его поддержка?

В какой то ветке писали что если вы реализуете языковой пакет то шанс есть. А вы пробовали он в локал раннере работает?

11.11.2013 13:16:36
xdrobx

xdrobx

ВМК МГУ имени Ломоносова

А что с рейтингом то произошло такое?

11.11.2013 14:16:14
Commandos

Commandos

Гродно

xdrobx

xdrobx

ВМК МГУ имени Ломоносова

А что с рейтингом то произошло такое?

Бета тест кончился. Заново рейтинг считается. Всё нормально

11.11.2013 14:17:44
winger

winger

Facebook

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

В какой то ветке писали что если вы реализуете языковой пакет то шанс есть. А вы пробовали он в локал раннере работает?

Да, в local-runner’е протестировал.

11.11.2013 14:20:51
Hohol

Hohol

Maxifier

Очень-очень хочется иметь возможность делать import static для своих классов в Java. В данный момент это, кажется, невозможно. Почему это мне нужно? Я хочу завести свой enum, и много-много использовать его. При этом не хочется каждый раз писать его имя для обращения к полям. Я умею делать это только с помощью import static, но его нельзя делать для классов в default package. Засунуть же свои классы в package тоже не получается - если отправить в зипнике просто все классы, говорит “could not find package…”. Если предварительно засунуть в папку с именем пекеджа, говорит что никаких папок в архиве быть не должно. Можно с этим что-нибудь сделать? Разрешить каким-либо образом свои пакеты, либо вообще в языковом пакете засунуть Strategy и MyStrategy в какой-нибудь пакет. (Или может то чего я хочу можно как-то сделать и без import static?)

11.11.2013 16:21:32
Hohol

Hohol

Maxifier

Забыл, что в Markdown нужно два перевода строк между абзацами делать =(

11.11.2013 16:22:41
kipill

kipill

МФПУ "Синергия"

Уважаемые JAVA-исты подскажите плз где и как разместить метод от куда будет реализовываться управление? Я как понял из правил вызывается класс move но не совсем понятно какой именно метод, конструктора не нашел, а свой дописать не дает. И есть ли еще какая документация кроме правил?

11.11.2013 17:28:44
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

kipill

kipill

МФПУ "Синергия"

Уважаемые JAVA-исты подскажите плз где и как разместить метод от куда будет реализовываться управление? Я как понял из правил вызывается класс move но не совсем понятно какой именно метод, конструктора не нашел, а свой дописать не дает. И есть ли еще какая документация кроме правил?

вызывается метод move. вам же примеры дали

11.11.2013 17:34:44
kipill

kipill

МФПУ "Синергия"

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

вызывается метод move. вам же примеры дали

Это тот который в классе MyStrategy?

11.11.2013 17:38:15
Commandos

Commandos

Гродно

kipill

kipill

МФПУ "Синергия"

Это тот который в классе MyStrategy?

Да. Причём для каждого солдатика класс стратегии свой.

11.11.2013 18:34:34
baobab

Скажите нубу, я так понял, свои внешние функции в Mystrategy.cpp разрешено добавлять. А как насчёт глобальных переменных? Не кидайте помидорами, но если я захочу написать поиск пути для каждого юнита на первом ходу, (а потом идти по нему в остальные) я могу сохранить этот путь в глобальную (или статическую) переменную? Или есть какие-то другие способы? Или пересчитывать путь каждый ход?… простите за нубство

11.11.2013 19:14:46
GreenTea

GreenTea

ISDDesign

Скажите нубу, я так понял, свои внешние функции в Mystrategy.cpp разрешено добавлять. А как насчёт глобальных переменных? Не кидайте помидорами, но если я захочу написать поиск пути для каждого юнита на первом ходу, (а потом идти по нему в остальные) я могу сохранить этот путь в глобальную (или статическую) переменную? Или есть какие-то другие способы? Или пересчитывать путь каждый ход?… простите за нубство

Не переживай ты так, все когда-то были нубами :) Сохранять все пути может быть не самя лучшая идея т.к. иногда на поле появляются препятствия в виде своих же бойцов. Я бы рекомендовал заниматься такой оптимизацией только когда выяснится что это занимает в алгоритме больше всего времени, и при этом времени уже не хватает. А в приципе можно сохранить в MyStrategy -объект этого класса создается один раз на всю игру.

11.11.2013 19:26:47
x-and

x-and

Севастополь

Hohol

Hohol

Maxifier

Очень-очень хочется иметь возможность делать import static для своих классов в Java. В данный момент это, кажется, невозможно. Почему это мне нужно? Я хочу завести свой enum, и много-много использовать его. При этом не хочется каждый раз писать его имя для обращения к полям. Я умею делать это только с помощью import static, но его нельзя делать для классов в default package. Засунуть же свои классы в package тоже не получается - если отправить в зипнике просто все классы, говорит “could not find package…”. Если предварительно засунуть в папку с именем пекеджа, говорит что никаких папок в архиве быть не должно. Можно с этим что-нибудь сделать? Разрешить каким-либо образом свои пакеты, либо вообще в языковом пакете засунуть Strategy и MyStrategy в какой-нибудь пакет. (Или может то чего я хочу можно как-то сделать и без import static?)

Полностью, обоими руками за! Но для этого надо использовать не default package, а это запрещено правилами. А ведь это действительно полезно и удобно Уважаемые учредители - обратите на это внимание.

11.11.2013 19:48:35
kalibr17

kalibr17

NEURON GRUP SRL

Ваша стратегия «упала» в коротком проверочном бою 4x3. Процесс стратегии непредвиденно завершился на ходе 0. exit code: -1073741819 что может быть?

11.11.2013 20:44:55
ipavlov

ipavlov

МШП

kalibr17

kalibr17

NEURON GRUP SRL

Ваша стратегия «упала» в коротком проверочном бою 4x3. Процесс стратегии непредвиденно завершился на ходе 0. exit code: -1073741819 что может быть?

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

11.11.2013 21:03:20
kalibr17

kalibr17

NEURON GRUP SRL

функция MyStrategy::move запускается каждый раз для каждой малой итерации пока не закончатся очки действия? и для каждого бойца отдельно? если объявить какие-то переменные, то они будут только для одного? что-то не догоняю…

11.11.2013 22:33:12
cygwin

cygwin

Минск

kalibr17

kalibr17

NEURON GRUP SRL

функция MyStrategy::move запускается каждый раз для каждой малой итерации пока не закончатся очки действия? и для каждого бойца отдельно? если объявить какие-то переменные, то они будут только для одного? что-то не догоняю…

Да, каждый раз, пока не будет вызвано EndMove или кончатся очки, и так для каждого бойца. Используй статические поля.

11.11.2013 23:00:20
admin

admin

Команда Russian AI Cup

Hohol

Hohol

Maxifier

Очень-очень хочется иметь возможность делать import static для своих классов в Java. В данный момент это, кажется, невозможно. Почему это мне нужно? Я хочу завести свой enum, и много-много использовать его. При этом не хочется каждый раз писать его имя для обращения к полям. Я умею делать это только с помощью import static, но его нельзя делать для классов в default package. Засунуть же свои классы в package тоже не получается - если отправить в зипнике просто все классы, говорит “could not find package…”. Если предварительно засунуть в папку с именем пекеджа, говорит что никаких папок в архиве быть не должно. Можно с этим что-нибудь сделать? Разрешить каким-либо образом свои пакеты, либо вообще в языковом пакете засунуть Strategy и MyStrategy в какой-нибудь пакет. (Или может то чего я хочу можно как-то сделать и без import static?)

Вы это имели ввиду?

import static Main.Type.*;

public class Main {
    public static void main(String[] args) {
        Type type = FIRST;
        if (type == SECOND) {
            System.out.println("Oops");
        }
    }
    
    enum Type {
        FIRST, SECOND
    }
}

11.11.2013 23:22:01
Hohol

Hohol

Maxifier

admin

admin

Команда Russian AI Cup

Вы это имели ввиду? import static Main.Type.*;

public class Main { public static void main(String[] args) { Type type = FIRST; if (type == SECOND) { System.out.println(“Oops”); } }

enum Type {
    FIRST, SECOND
}

}

Ну да. Только то, что вы написали, тоже не компилится.

11.11.2013 23:35:04
cNoNim

cNoNim

DataArt

ответьте пожалуйста все же насчет С++11 можно на него рассчитывать или уже все проехали

11.11.2013 23:53:21
admin

admin

Команда Russian AI Cup

Hohol

Hohol

Maxifier

public class Main { public static void main(String[] args) { Type type = FIRST; if (type == SECOND) { System.out.println(“Oops”); } } enum Type { FIRST, SECOND } } Ну да. Только то, что вы написали, тоже не компилится.

К сожалению да, IDEA не подсказала наличие ошибок.

12.11.2013 0:18:50
winger

winger

Facebook

admin

admin

Команда Russian AI Cup

К сожалению да, IDEA не подсказала наличие ошибок.

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

12.11.2013 0:41:35
admin

admin

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

ответьте пожалуйста все же насчет С++11 можно на него рассчитывать или уже все проехали

Как мы уже писали выше, с ним всё не так просто. Например, под MinWG 4.7.1 (32-bit) пакет не собирается с -std=c++11. К сожалению в мире С++ это сплошь и рядом - различия возникают не только вокруг разных компиляторов, но и версий одного компилятора, его версий для разных платформ или разрядностей. К сожалению, не всё просто - все ошибки находятся внутри third-party библиотек (с нашим кодом проблем нет). К тому же, кроме того, чтобы заставить собираться этот код под c++11, надо еще убедиться что он работает для разных компиляторов и платформ.

12.11.2013 0:43:02
admin

admin

Команда Russian AI Cup

winger

winger

Facebook

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

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

12.11.2013 0:48:28
cNoNim

cNoNim

DataArt

admin

admin

Команда Russian AI Cup

Как мы уже писали выше, с ним всё не так просто. Например, под MinWG 4.7.1 (32-bit) пакет не собирается с -std=c++11. К сожалению в мире С++ это сплошь и рядом - различия возникают не только вокруг разных компиляторов, но и версий одного компилятора, его версий для разных платформ или разрядностей. К сожалению, не всё просто - все ошибки находятся внутри third-party библиотек (с нашим кодом проблем нет). К тому же, кроме того, чтобы заставить собираться этот код под c++11, надо еще убедиться что он работает для разных компиляторов и платформ.

да да я помню ваш предыдущий ответ… но вы просто ответьте, есть ли смысл все таки расчитывать, что С++11 будет, или трактовать ваш ответ как не С++11 не будет и поехали дальше, просто сейчас ситуация какая то не понятная

если С++11 не будет поддерживаться изза каких то проблем связанных с компилятором, можно ли рассчитывать на его поддержку если эти проблемы будут решены, по аналогии с языковыми пакетами других языков?

просто какая то странная ситуация, вроде бы в комментариях проскочила мысль на счет того, что возможно будут введены другие языки, но допустим вот тут D хотят пропихнуть, а реакции особой нет…

в том же духе я могу спросить, можно ли рассчитывать, на введение С++11 как отдельного языка, если я реализую пакет для него, который соберется в нужных вам условиях?

12.11.2013 0:52:08
admin

admin

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

да да я помню ваш предыдущий ответ… но вы просто ответьте, есть ли смысл все таки расчитывать, что С++11 будет, или трактовать ваш ответ как не С++11 не будет и поехали дальше, просто сейчас ситуация какая то не понятная если С++11 не будет поддерживаться изза каких то проблем связанных с компилятором, можно ли рассчитывать на его поддержку если эти проблемы будут решены, по аналогии с языковыми пакетами других языков? …

да да я помню ваш предыдущий ответ… но вы просто ответьте, есть ли смысл все таки расчитывать, что С++11 будет, или трактовать ваш ответ как не С++11 не будет и поехали дальше, просто сейчас ситуация какая то не понятная

В самом деле непонятная. Мы получили несколько сообщений, что пакет собирается под C++11 и тут я убеждаюсь, что нет.

если С++11 не будет поддерживаться изза каких то проблем связанных с компилятором, можно ли рассчитывать на его поддержку если эти проблемы будут решены, по аналогии с языковыми пакетами других языков?

Если в ближайшем времени удастся победить сложности, то поддержка возможна.

просто какая то странная ситуация, вроде бы в комментариях проскочила мысль на счет того, что возможно будут введены другие языки, но допустим вот тут D хотят пропихнуть, а реакции особой нет…

Это не мгновенная операция сделать review кода, рассмотреть возможность поддержки D на серверах, сформулировать требования к пакету и автору. Мы работаем над этим. Вероятно, язык D будет поддержан.

в том же духе я могу спросить, можно ли рассчитывать, на введение С++11 как отдельного языка, если я реализую пакет для него, который соберется в нужных вам условиях?

Правильная мысль, это сделать общий пакет для C++11 и С++03 (так ведь называют текущий популярный стандарт?) Необходимо, чтобы он собирался на всех популярных desktop-платформах в g++ версий 4.7.x и выше и крайне желательна поддержка Visual Studio 2013. Как уже было написано выше, сборка это необходимое условие, но вовсе не достаточное - необходимо тщательно проверить работоспособность в разных случаях использования. Конечно, необходимо следовать принятому в С++-пакете code style. Очень важный пункт - гарантия поддержки, хотя в случае c++ мы и сами сможем вносить правки.

12.11.2013 1:08:52
cNoNim

cNoNim

DataArt

admin

admin

Команда Russian AI Cup

– В самом деле непонятная. Мы получили несколько сообщений, что пакет собирается под C++11 и тут я убеждаюсь, что нет. Если в ближайшем времени удастся победить сложности, то поддержка возможна. Это не мгновенная операция сделать review кода, рассмотреть возможность поддержки D на серверах, сформулировать требования к пакету и автору. Мы работаем над этим. Вероятно, язык D будет поддержан. …

для того что бы собрать пакет С++ с флагом -std=c++11, в mingw нужно добавить флаг -DWIN32

либо заменить все

#ifdef WIN32

на более правильные

#ifdef _WIN32

надеюсь этого достаточно?

насчет поддержки, и теста, я могу протестировать на всем чем скажете

допустим я собирал уже под линуксом, просто когда вижу gcc я в первую очередь думаю, о линуксе, а не о mingw…

в основном я пишу для конкурса в Visual Studio 2013, так что с ней ни каких проблем точно нет

12.11.2013 1:16:36
admin

admin

Команда Russian AI Cup

cNoNim

cNoNim

DataArt

для того что бы собрать пакет С++ с флагом -std=c++11, в mingw нужно добавить флаг -DWIN32 либо заменить все #ifdef WIN32 на более правильные #ifdef _WIN32 надеюсь этого достаточно? насчет поддержки, и теста, я могу протестировать на всем чем скажете допустим я собирал уже под линуксом, просто когда вижу gcc я в первую очередь думаю, о линуксе, а не о mingw… …

Отлично. Давайте перейдем к общению через личные сообщения для выяснения деталей.

12.11.2013 1:17:55
baho

baho

3Planesoft

Вау, если вы добавите C++11, это будет мегакруто! :) cNoNim, жму руку за настойчивость! Поднадоело писать объявления итераторов для циклов, да и другие возможности при необходимости станут доступны.

12.11.2013 2:03:20
cNoNim

cNoNim

DataArt

baho

baho

3Planesoft

Вау, если вы добавите C++11, это будет мегакруто! :) cNoNim, жму руку за настойчивость! Поднадоело писать объявления итераторов для циклов, да и другие возможности при необходимости станут доступны.

не то слово надоело… хуже всего то что я такой ленивый что не писал их ))) сижу тут простыни кода на С++11 генерирую, а тут его не хотят поддерживать…. приходится настаивать )))

12.11.2013 2:07:50
alexprotoss

alexprotoss

Долгопрудный

не знаю, где спросить, поэтому спрошу тут =) возможно пригодится не только мне =) файл compilation.log по-видимому в кодировке CP1251, стандартный не жует, нотепад даже с плагином TextFX не жует =) помогает только онлайновые декодэры =) нет ли возможности нормально просматривать этот файл (все делаю под Windows) =) заранее спасибо ^_^

12.11.2013 2:15:23
cNoNim

cNoNim

DataArt

alexprotoss

alexprotoss

Долгопрудный

не знаю, где спросить, поэтому спрошу тут =) возможно пригодится не только мне =) файл compilation.log по-видимому в кодировке CP1251, стандартный не жует, нотепад даже с плагином TextFX не жует =) помогает только онлайновые декодэры =) нет ли возможности нормально просматривать этот файл (все делаю под Windows) =) заранее спасибо ^_^

эта проблема не файла, а кодировок консоли у тебя скорее всего русская студия, он скорее всего выводит сообщения в кодировке cP1251, но стандартная кодировка консоли в винде CP866 попробуй сделать перед запускам батника, или добавь в сам батник в самое начало

 chcp 1251

12.11.2013 2:18:55
cNoNim

cNoNim

DataArt

да проверил… работатет

12.11.2013 2:19:43
santa324

santa324

Москва

Подскажите, как можно выяснить являлось ли превышение лимита времени причиной падения стратегии во время боя? В копии боя при просмотре “репитером” есть информация о превышении лимита времени? или только исключения таким способом можно выловить?

12.11.2013 2:36:26
nop

nop

БГУ

Да, кстати, GCC-C++11 нормально работает в XCode 4, Apple Clang

12.11.2013 3:12:09
Bibr

Bibr

Майкоп

Я новичок в java. Подскажите, чтобы использовать другие коллекции, например List, мне надо дополнительно подключить библиотеку (или как правильно): import java.util.*;

Сейчас там подключено только import java.util.Random; import java.util.Vector;

Вопрос: такое подключение повлияет на размер занимаемой памяти и время работы? И вообще, по правилам, можно ли подключать?

12.11.2013 7:46:29
alexprotoss

alexprotoss

Долгопрудный

cNoNim

cNoNim

DataArt

эта проблема не файла, а кодировок консоли у тебя скорее всего русская студия, он скорее всего выводит сообщения в кодировке cP1251, но стандартная кодировка консоли в винде CP866 попробуй сделать перед запускам батника, или добавь в сам батник в самое начало chcp 1251

к сожалению не помогло, при добавлении “CP 866” в батник меняется кодировка текста в консоли, но не меняется кодировка текста в лог-файле =)

12.11.2013 9:04:05
cNoNim

cNoNim

DataArt

alexprotoss

alexprotoss

Долгопрудный

к сожалению не помогло, при добавлении “CP 866” в батник меняется кодировка текста в консоли, но не меняется кодировка текста в лог-файле =)

вы не внимательно читаете, нужно написать в батнике

chcp 1251

а не CP 866

12.11.2013 13:10:47
riadwaw

riadwaw

МФТИ

Bibr

Bibr

Майкоп

Я новичок в java. Подскажите, чтобы использовать другие коллекции, например List, мне надо дополнительно подключить библиотеку (или как правильно): import java.util.*; Сейчас там подключено только import java.util.Random; import java.util.Vector; Вопрос: такое подключение повлияет на размер занимаемой памяти и время работы? И вообще, по правилам, можно ли подключать?

Само по себе подключение ничему не вредит

12.11.2013 13:27:50
nop

nop

БГУ

Уважаемые организаторы, прошу добавить в языковом пакете для C++, в файл RemoteProcessClient.cpp после строчки if (!socket.Open((uint8*) host.c_str(), port)) { что-нибудь вроде fprintf(stderr, “Unable to connect to server at: %s:%d\n”, host.c_str(), port);

можно завернуть в ifdef чего-нибудь, чтоб не писало ничего при тестировании у вас.

13.11.2013 1:08:20
baho

baho

3Planesoft

На сервер еще C++11 не добавили? Вроде в языковых пакетах что-то такое появилось, а при отсылке все равно выдает специфические ошибки.

13.11.2013 1:18:55
spark

model.* java не компилируется из-за UTF-8, кажется лучше бы вообще код по английски комментировать - участников было бы больше раза в два

В python 3 тоже такая проблема. Переписываю комментарии

13.11.2013 20:02:02
HiVaccessdenied

HiVaccessdenied

ООО "Мера НН"

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

14.11.2013 6:11:09
Ramp

Ramp

Рыбинск

Как да Паскале узнать длину массива troopers после строчки troopers:=world.GetTroopers

14.11.2013 15:01:51
kipar

kipar

ООО Доминанта

Ramp

Ramp

Рыбинск

Как да Паскале узнать длину массива troopers после строчки troopers:=world.GetTroopers

Length(troopers). Но индексация там с нуля, т.е. от 0 до Length(troopers)-1.

14.11.2013 15:04:53
castey

castey

МШП

На Python 2.7 для разных видов своих воинов вызывается разные объекты класса MyStrategy, что не особо удобно и нигде не описано =(

14.11.2013 18:15:25
castey

castey

МШП

castey

castey

МШП

На Python 2.7 для разных видов своих воинов вызывается разные объекты класса MyStrategy, что не особо удобно и нигде не описано =(

Вызываются*

14.11.2013 18:16:33
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

castey

castey

МШП

На Python 2.7 для разных видов своих воинов вызывается разные объекты класса MyStrategy, что не особо удобно и нигде не описано =(

Вообще то описано и в других языках тоже самое

14.11.2013 18:39:55
niosus

niosus

Фрайбург

Я может где-то сильно недосматриваю, но у меня проект не собирается с -std=c++11, так как не находит такой флаг, зато замечательно собирается с -std=c++0x. Будет ли разница при отсылке стратегии?

14.11.2013 18:51:10
nut.code.monkey

nut.code.monkey

Киев

Для языка C++11 В файл Trooper.cpp нужно добавить вначале #include <cstdlib> чтобы компилятор узнал откуда ему узнать о функции exit

14.11.2013 19:27:59
castey

castey

МШП

Да, и как вообще получить экземпляр класса Player, в котором должны хранится ответы на запрос командира?

14.11.2013 19:44:19
castey

castey

МШП

amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

Вообще то описано и в других языках тоже самое

Можно пруф?

14.11.2013 19:45:28
cNoNim

cNoNim

DataArt

nut.code.monkey

nut.code.monkey

Киев

Для языка C++11 В файл Trooper.cpp нужно добавить вначале #include чтобы компилятор узнал откуда ему узнать о функции exit

у вас на каком то компиляторе проблемы с этим?

я тестировал нынешний пакет, на студиях с 2008 по 2013 в MinGW 4.7.1, 4.8.1 в GCC 4.8.1 под линуксом

14.11.2013 19:54:42
nut.code.monkey

nut.code.monkey

Киев

cNoNim

cNoNim

DataArt

у вас на каком то компиляторе проблемы с этим? я тестировал нынешний пакет, на студиях с 2008 по 2013 в MinGW 4.7.1, 4.8.1 в GCC 4.8.1 под линуксом

LLVM, Xcode. Уже разобрался.

14.11.2013 20:03:05
yudeshii

yudeshii

ТУСУР

castey

castey

МШП

Да, и как вообще получить экземпляр класса Player, в котором должны хранится ответы на запрос командира?

world.players

14.11.2013 20:40:22
54f42a15

запилите руби плз

15.11.2013 2:19:32
spaun2002

spaun2002

Россия

Качество написанного c++ пакета вызывает некоторые вопросы. void RemoteProcessClient::writeToken(string token) нужно заменить на void RemoteProcessClient::writeToken(const std::string& token) void RemoteProcessClient::writeMove(Move move) заменить на void RemoteProcessClient::writeMove(const model::Move& move) void RemoteProcessClient::writeString(string value) заменить на void RemoteProcessClient::writeString(const std::string& value) В функции CActiveSocket *CPassiveSocket::Accept() после pClientSocket = new CActiveSocket() делать проверку if (pClientSocket != NULL) не имеет смысла Также нет смысла в функции RemoteProcessClient::~RemoteProcessClient() проверять указатели на NULL перед удалением.

15.11.2013 14:49:38
niosus

niosus

Фрайбург

Ребята, подскажите пожалуйста. В с++ вызов getTroopers() возвращает пустоту, хотя мои солдаты стоят один возле другого. Не подскажете что может быть?

15.11.2013 23:55:18
Tananndart

Tananndart

Казань

Кто нибудь под Linux заводил? Как впечатления?

16.11.2013 0:09:44
cNoNim

cNoNim

DataArt

spaun2002

spaun2002

Россия

Качество написанного c++ пакета вызывает некоторые вопросы. void RemoteProcessClient::writeToken(string token) нужно заменить на void RemoteProcessClient::writeToken(const std::string& token) void RemoteProcessClient::writeMove(Move move) заменить на void RemoteProcessClient::writeMove(const model::Move& move) void RemoteProcessClient::writeString(string value) заменить на void RemoteProcessClient::writeString(const std::string& value) В функции CActiveSocket *CPassiveSocket::Accept() после pClientSocket = new CActiveSocket() делать проверку if (pClientSocket != NULL) не имеет смысла Также нет смысла в функции RemoteProcessClient::~RemoteProcessClient() проверять указатели на NULL перед удалением.

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

другое дело, что было бы круто если б кто нить написал очень качественный пакет для С++… но когда это делать, не сейчас же, сейчас надо стратегией заниматься, а у разрабов тоже много дел наверное

16.11.2013 0:13:58
cNoNim

cNoNim

DataArt

Tananndart

Tananndart

Казань

Кто нибудь под Linux заводил? Как впечатления?

что именно интересует?

16.11.2013 0:14:09
cNoNim

cNoNim

DataArt

niosus

niosus

Фрайбург

Ребята, подскажите пожалуйста. В с++ вызов getTroopers() возвращает пустоту, хотя мои солдаты стоят один возле другого. Не подскажете что может быть?

getTroopers возвращает ваших солдатов в любом случае…

так что проблема более глобальна

у вас последний пакет С++?

16.11.2013 0:14:53
niosus

niosus

Фрайбург

Tananndart

Tananndart

Казань

Кто нибудь под Linux заводил? Как впечатления?

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

16.11.2013 1:46:18
niosus

niosus

Фрайбург

cNoNim

cNoNim

DataArt

getTroopers возвращает ваших солдатов в любом случае… так что проблема более глобальна у вас последний пакет С++?

Должен быть последний. Вчера только скачал. Эта проблема проявляется не всегда. Я разберусь точно когда она проявляется и не может ли это быть моей ошибкой и напишу еще. Спасибо за достаточно быстрый ответ, как бы там ни было.

16.11.2013 1:47:32
DenoM

DenoM

iTechArt Group

Можно ли обновить Mono компилятор до .NET 4.5 ? Не хватает [MethodImpl(MethodImplOptions.AggressiveInlining)] !!!!!

17.11.2013 20:29:04
FirstStorm

FirstStorm

Пермь

Подскажите, где взять localRunner? В пакете ничего подобного нет.

21.11.2013 20:01:01
amurushkin

amurushkin

ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)

FirstStorm

FirstStorm

Пермь

Подскажите, где взять localRunner? В пакете ничего подобного нет.

верхнее меню сайта раздел документация

21.11.2013 20:06:38
albynos

albynos

Ростов-На-Дону

FirstStorm

FirstStorm

Пермь

Подскажите, где взять localRunner? В пакете ничего подобного нет.

вверху страницы менюшка документация-local runner

21.11.2013 20:07:25
baho

baho

3Planesoft

А для C++11 и C++ пакета можно флаг поддержки SSE2 врубить? :D Надо добавить -march=pentium4. А еще лучше -march=corei7 :)

25.11.2013 14:52:10
alexanderk23

alexanderk23

КубГУ

baho

baho

3Planesoft

А для C++11 и C++ пакета можно флаг поддержки SSE2 врубить? :D Надо добавить -march=pentium4. А еще лучше -march=corei7 :)

Тогда уж и интерпретатор Python заменить на PyPy, чтобы нам не так обидно было ;)

25.11.2013 15:22:33
Megabyte

Megabyte

ООО Сибтел-крипто

Использую C# пакет. Стоит у меня тот же компилятор что на сервере конкурса. нашел серьезный, непонятный баг, который может убить любую стратегию.

http://russianaicup.ru/forum/index.php?topic=122.0

не понятно что это и как бороться. Хоть бросай конкурс.

03.12.2013 14:37:24
Megabyte

Megabyte

ООО Сибтел-крипто

Megabyte

Megabyte

ООО Сибтел-крипто

Использую C# пакет. Стоит у меня тот же компилятор что на сервере конкурса. нашел серьезный, непонятный баг, который может убить любую стратегию. http://russianaicup.ru/forum/index.php?topic=122.0 не понятно что это и как бороться. Хоть бросай конкурс.

Проблема решена. Возникает только при установленном брекпоинте.

03.12.2013 15:36:57
Megabyte

Megabyte

ООО Сибтел-крипто

Сегодня начал делать пакет для actionscript3. : ) надеюсь завтра будет готово.

09.12.2013 23:03:50
alexanderk23

alexanderk23

КубГУ

А для Ruby и PHP кто-нибудь взялся пилить или смысла нет? :)

09.12.2013 23:21:56
nop

nop

БГУ

alexanderk23

alexanderk23

КубГУ

А для Ruby и PHP кто-нибудь взялся пилить или смысла нет? :)

Организаторы писали, что было несколько попыток сделать пакет для Руби, но все скисли. P.S. Может и мне, чисто на поржать, запилить пакет для ANSI C? :)

10.12.2013 1:09:32
nop

nop

БГУ

Кстати, о C++ пакете. Я скачал его заново, но по прежнему не нахожу нигде вызова функции void RemoteProcessClient::close()
Наверное, просто так, для красоты, создавалась, выходить из приложения, не закрыв сокеты, нынче модно.

10.12.2013 1:14:30
alexanderk23

alexanderk23

КубГУ

nop

nop

БГУ

Организаторы писали, что было несколько попыток сделать пакет для Руби, но все скисли. P.S. Может и мне, чисто на поржать, запилить пакет для ANSI C? :)

Ну, почему же только «на поржать»? В муравьях вон был языковой пакет на C и я даже им попользовался, ибо крестов не разумею :) Понятно, что в C нету удобных грелок для пупка и придётся самому строить свои велосипеды, но так на то уж каждый сам себе злое буратино :)

10.12.2013 1:22:03
nop

nop

БГУ

alexanderk23

alexanderk23

КубГУ

Ну, почему же только «на поржать»? В муравьях вон был языковой пакет на C и я даже им попользовался, ибо крестов не разумею :) Понятно, что в C нету удобных грелок для пупка и придётся самому строить свои велосипеды, но так на то уж каждый сам себе злое буратино :)

Если кому-то действительно нужно, займусь созданием C-пакета. Не знаю, впрочем, как к этому отнесутся организаторы. Пока удалил из проекта C++ -ный CSimpleSocket, заменив на минимальную и вроде как мультиплатформенную самописную C-шную обертку.

10.12.2013 2:44:04
Megabyte

Megabyte

ООО Сибтел-крипто

Допилил actionscript3 пакет : ) Работает. Пришлось возиться с оберткой для соккета. Блокируемых соккетов нет, пришлось делать лапшу из калбеков, с очередью полей, которые нужно дождаться из сокета. Если не соваться в RemoteClientProcess, то все выглядит как обычно : ) Сейчас попробую на гитхаб выложить. Для запуска требуется Flashdevelop

10.12.2013 11:41:28
Megabyte

Megabyte

ООО Сибтел-крипто

https://github.com/Megabyteceer/actionscripts3-cgdk

в папке батник компиляции и запуска на обновление. Для билда требуется FlashDevelop с установленным AIR-sdk.

Для запуска нескольких стратегий нужно ставить уникальный APP_ID в батник run.bat, и точно такой же APP_ID в application.xml

10.12.2013 13:52:56
SladeThe

SladeThe

Команда Russian AI Cup

santa324

santa324

Москва

Подскажите, на какой яве (х64 или х32) запускается стратегия на сервере? Сам выяснить не смог: java.security.AccessControlException: access denie…opertyPermission“ ”sun.arch.data.model“ ”read" Но похоже на х32, хотелось бы знать наверняка.

x32

11.12.2013 0:11:12
nop

nop

БГУ

А вот и мое упражнение в мазохизме. Языковой пакет для C! https://github.com/noop-dev/c-cgdk

11.12.2013 5:22:48
lama

lama

Akademos Inc.

Мужики, подскажите, что за ерунда… Сколько раз заливал стратегию на Java и все было хорошо, а теперь внес очередные изменения, и при попытке залить, она падает в проверочном бою с такой ошибкой:

Вывод стратегии в stdout: java.lang.NoClassDefFoundError: PathFinder at MyStrategy.newTurn(MyStrategy.java:248) ….ну и дальше стек вызовов….

в той строке, на которую ругается, написано PathFinder.world = world; , где world - статическое свойство, описано так: public static World world = null;

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

Что это может быть?

12.12.2013 6:27:08
jetblack

jetblack

ТКС

lama

lama

Akademos Inc.

Мужики, подскажите, что за ерунда… Сколько раз заливал стратегию на Java и все было хорошо, а теперь внес очередные изменения, и при попытке залить, она падает в проверочном бою с такой ошибкой: Вывод стратегии в stdout: java.lang.NoClassDefFoundError: PathFinder at MyStrategy.newTurn(MyStrategy.java:248) ….ну и дальше стек вызовов…. …

Думаю, следует проверить, что PathFinder лежит в том же пакете, что и MyStrategy. И проверьте, действительно существует этот класс в листинге с залитой стратегией.

12.12.2013 11:56:06
lama

lama

Akademos Inc.

jetblack

jetblack

ТКС

Думаю, следует проверить, что PathFinder лежит в том же пакете, что и MyStrategy. И проверьте, действительно существует этот класс в листинге с залитой стратегией.

спасибо, подолбавшись с diff-ом с рабочей версией, разобрался… оказалось, в одном из файлов, которые даже не упоминались в эррор логе, была след. строка import javafx.scene.shape.Path; по всей видимости, idea в какой-то момент этот класс добавила в импорт… наверное в автокомплите где-то не тот вариант выбрал или еще что. понятия не имею, за что отвечает этот класс, но я его не использую, и по всей видимости, на серверах он тоже не доступен. не понимаю только, правда, почему они не говорят в ошибке, что проблема в этом… хорошо что diff есть, а то вручную найти было бы нереально…. там одного только моего кода 175кб

12.12.2013 15:33:41
nop

nop

БГУ

Было бы неплохо, если бы кто-то, кому это хоть немного интересно, протестировал C-пакет на чем-то кроме VS2012 и gcc на OSX.

12.12.2013 20:02:30
alexanderk23

alexanderk23

КубГУ

nop

nop

БГУ

Было бы неплохо, если бы кто-то, кому это хоть немного интересно, протестировал C-пакет на чем-то кроме VS2012 и gcc на OSX.

Ubuntu 13.10, gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 — собирается. При попытке прицепиться к локалраннеру strace показывает следующее:

connect(3, {sa_family=AF_INET, sin_port=htons(31001), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
setsockopt(3, SOL_TCP, TCP_NODELAY, [0], 4) = 0
sendto(3, "\2\20\0\0\0000000000000000000", 21, 0, NULL, 0) = 21
recvfrom(3, <...и тут оно начинает ждать с моря погоды...>

ЗЫ: а в чём смысл собирать статически?

+возможно, пригодится Makefile: https://gist.github.com/alexanderk23/7932550

12.12.2013 22:33:07
alexanderk23

alexanderk23

КубГУ

nop

nop

БГУ

Было бы неплохо, если бы кто-то, кому это хоть немного интересно, протестировал C-пакет на чем-то кроме VS2012 и gcc на OSX.

Пардон, был неправ, всё работает. Забыл, что локалраннер у меня на две стратегии сконфигурирован.

12.12.2013 22:39:44
nop

nop

БГУ

alexanderk23

alexanderk23

КубГУ

Ubuntu 13.10, gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 — собирается. При попытке прицепиться к локалраннеру strace показывает следующее: connect(3, {sa_family=AF_INET, sin_port=htons(31001), sin_addr=inet_addr(“127.0.0.1”)}, 16) = 0 setsockopt(3, SOL_TCP, TCP_NODELAY, [0], 4) = 0 sendto(3, “\2\20\0\0\0000000000000000000”, 21, 0, NULL, 0) = 21 recvfrom(3, <…и тут оно начинает ждать с моря погоды…> …

Я скопировал строку из скрипта для C++. Для чего-то это делалось.. Я также не знаю, зачем, например, отключали часть опций оптимизации. Для мака пришлось статическую убрать, потому что там она просто не поддерживается. То же самое со скриптами вместо мейкфайлов итд.

12.12.2013 23:43:15
nop

nop

БГУ

Большой спасибо за проверку, кстати. Мейкфайл я добавлять пока все же не буду, т.к. “уже и так всё работает”, кроме того, там захардкожены имена компилируемых файлов, без учета того, что они могут и добавляться.

12.12.2013 23:49:10
alexanderk23

alexanderk23

КубГУ

nop

nop

БГУ

Большой спасибо за проверку, кстати. Мейкфайл я добавлять пока все же не буду, т.к. “уже и так всё работает”, кроме того, там захардкожены имена компилируемых файлов, без учета того, что они могут и добавляться.

Не за что, всегда рад :) Про опции только одно предположение — вероятно, сборка бинарника происходит единожды и узлы в кластере обсчёта игр могут иметь неодинаковую конфигурацию. А мейкфайл можно заставить брать вообще все *.c-файлы, заменив строчку с SOURCES на SOURCES=$(shell find -name '*.c') (это я уже для собственного удовольствия, с аргументом «работает — не трожь» согласен :).

13.12.2013 0:25:59