Мы запустили единую систему регистрации для чемпионатов Mail.Ru Group. Авторизуйтесь, используя ваш e-mail от russianaicup.ru или зарегистрируйтесь на портале единой регистрации. После регистрации вы будете перенаправлены назад.
Пароли учетных записей сайта russianaicup.ru не были перенесены в единую систему регистрации. Если вы впервые используете единую систему регистрации, вам будет необходимо восстановить пароль.
Для написания собственной стратегии для 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:
Для вашего удобства мы разработали утилиту Repeater, которая поможет у себя на компьютере локально повторять бои, в которых участвовала ваша стратегия. Подробнее вы можете узнать об этой утилите тут.
MIPT
(Java) Могу ли я быть уверенным, что поля класса World не будут изменены после совершения хода? Если да, то тогда зачем копировать массив cells?
UWC
model.* java не компилируется из-за UTF-8, кажется лучше бы вообще код по английски комментировать - участников было бы больше раза в два
Команда 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;
}; …
Спасибо. Исправили. Попробуйте скачать пакет заново.
На С++ нет возможности поменять положение труппера. Или они сами падают когда хотят?
move.setAction(LOWER_STANCE); return;
На питоне 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 в дебагере выглядит очень странновато…
Теперь должно работать
К сожалению не работает… ошибка не в преобразовании строки в число… толи не то с индексацией массива, толи он заполнен не так…
возможно я ошибаюсь… вроде бы работает как надо… протестирую побольше
спасибо за помощь!
Можете выводить ошибки компиляции? А то стратегия не добавляется с ошибкой компиляции, я уже всё у себя проверил, на разных компиляторах, с -Wall.
Нажмите в лейбл “Ошибка компиляции” на странице ваших стратегий.
Можете выводить ошибки компиляции? А то стратегия не добавляется с ошибкой компиляции, я уже всё у себя проверил, на разных компиляторах, с -Wall.
А разве сейчас не выодится? Нажмите на вердикт.
P.S. Мы переработали клиент для C++ под другой Code Style. Смотрите обновление постов Языковые пакеты и Окрытый бета-тест. Вероятно, дело в этом.
Харьков
Ой, так вы вообще всё поменяли! :) Ну и славненько, а то кое_где_так, КоеГдеТак было.
Если я не ошибаюсь, то баг. Бой №1166. Ход 15. Остался один мой командир, поэтому проверить легко. World.GetBonuses при локальном повторе (очевидно и при игре) возвращает пустой массив, хотя визуально на карте их дофига. А вообще массив бонусов пустой, начиная с третьего хода
Согласно документации, вы получаете только список видимых вашими юнитами бонусов.
Согласно документации, вы получаете только список видимых вашими юнитами бонусов.
упс… спасибо!
Подскажите пожалуйста, скачиваю 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. Именно к нему пытается коннектиться клиент. Клиент это только ваша стратегия, игрового движка в нём нет. Если же вы так и делаете, то возможно дело в файрволле или чём-то ещё.
Сперва нужно запустить LocalRunner. Именно к нему пытается коннектиться клиент. Клиент это только ваша стратегия, игрового движка в нём нет. Если же вы так и делаете, то возможно дело в файрволле или чём-то ещё.
Уже разобрался :) Неправильно запускал localrunner. Спасибо!
Новый кодстайл для С++ ужасающий и нечитаемый. Зачем экономить на открывающих фигурных скобках и не переносить на новую строку? Недостатка в строках вроде не читается. Ладно в MyStrategy.cpp я ещё переделаю в более удобный но мне надо ещё и остальной код смотреть.
Прошлый кодстайл многим не нравился, и нас неоднократно просили его переделать. Мы решили сделать код C++ максимально похожим на Java, чтобы участникам проще было ориентироваться как в JavaDocs, так и в клиенте. Мы понимаем, что у каждого стиля есть как свои сторонники, так и противники, но интуитивно (без чтения Code Style Guide) было непонятно, почему разные функции пишутся в разных регистрах. Сейчас такого противоречия нет.
Что же касается экономии строк, то это действительно очень удобно, если, конечно, у вас не HD-монитор, повёрнутый на 90°.
404 при попытке скачать хоть какой-нибудь языковой пакет.
попробуй так http://russianaicup.ru/s/1383607732313/assets/cgdks/cpp-cgdk.zip?rnd
или так
Ссылка
Почему бы не добавить флаг -std=c++0x?
К сожалению, С++11 обратно не совместим с обширно используемыми версиями C++. Например, используемая библиотека csimplesocket (by Mark Carrier) не компилируется в C++11. По возможности, C++11 будет поддержан, но это не просто добавление флага.
VS выдает в World.cpp в ф-ции is_visible() : min - identifier is undefined
Скачайте актуальную версию С++-пакета. Какая версия Visual Studio?
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
В третьем питоне та же опечатка – shot_cost вместо shoot_cost.
я думаю это уже не особо принципиально, только всем рефакторить прийдется если поменяют
В третьем питоне та же опечатка – shot_cost вместо shoot_cost.
в c# та же опечатка. уже писал про нее - оставили без ответа.
JetBrains
Цена по-английски cost, выстрел shot. Цена выстрела – cost of a shot, или shot cost. Никакой опечатки нет.
в c# та же опечатка. уже писал про нее - оставили без ответа.
На самом деле и shot_cost
почти подходит - “стоимость выстрела”. Сомнения в целесообразности исправления были вызваны отсутствием статической типизации в Питоне. Так, невнимательный участник может использовать старый код и получить неправильное поведение в боях.
Скачайте актуальную версию С++-пакета. Какая версия Visual Studio?
Сегодня качал, VS 2013
Киев
и опять питон. У меня пишет ошибка верификации. Хотя локально работает без падений. Боя тестового нет. Как понять что именно не так с точки зрения сервера? Как узнать например, что быстродействия на такт не хватает? А учитывая что питон не быстрый - то вполне может и тормозить.
Киев
на всякий случай для пользователей питона: т.к. у нас не компилится и довольно много отсвует проверок, то при заливке учитывайте, что проверка будет на 5 типа солдат, т.е. если есть код a[me.type] и размер массива 3, то стратегия не зальется.
Скачайте актуальную версию С++-пакета. Какая версия Visual Studio?
VS выдает в World.cpp в ф-ции is_visible() : min - identifier is undefined Скачайте актуальную версию С++-пакета. Какая версия Visual Studio?
вообще-то min объявлен в С++ в хидере algorithm который не включен в World.cpp
Команда Russian AI Cup
“На данный момент мы поддерживаем языки” - есть варианты расширения списка? Haskell планируется?
Создание клиента для каждого языка является очень трудоёмкой задачей, тем более, что не все поддерживаемые языки являются для команды разработчиков «родными». Поэтому мы не планируем расширять набор своими силами. Если у вас хватит энтузиазма переписать клиент на Haskell по образцу уже существующих, то с вероятностью 90% мы его поддержим.
вообще-то min объявлен в С++ в хидере algorithm который не включен в World.cpp
Да, проблема уже выявлена и исправление внесено в код. Обновим пакет как только внесем все текущие запланированные изменения пакета.
SPbSU
Добавьте, пожалуйста, какой-нибудь makefile в клиент с++. Компиляция всего пакета с нуля каждый раз делается очень долго.
Для Java-пакета, можете сделать доступ к полю World.cellVisibilities? Например таким способом: public boolean[][][][][] getCellVisibilities() { return cellVisibilities; } Не всегда удобно пользоваться функцией isVisible(…)
DataArt
если еще что нибудь будете править… рассмотрите вот эти правки https://gist.github.com/cNoNim/7340869 если оставлять так как есть то World и PlayerContext не являются POD типами и для них не создается автоматически оператор присваивания… не знаю критично это для кого нить или нет, но все же… + я бы посоветовал, все перечисления объявить как char, например
enum CellType : char
для экономии памяти, + попробуйте собрать пакет для С++ в студии с варнингами 4 уровня, многие перечисляемые мной моменты вылезут так же я бы ушел во всех местах от вектора, векторов не кашерно это все ни какой проблемы хранить cells в сплошном векторе нету
ну и еще один момент…
я конечно не разбирался, но не проще ли хранить
cellVisibilities
как
std::vector<CellType>
и чуточку подправить функцию isVisible
DataArt
и еще совсем забыл можно к методам
isHolding*()
добавить
isHolding(BonusType type);
?
Санкт-Петербург
скачал последний языковой пакет c++, vs2010, локально все работает, при попытке загрузить сюда пишет “ошибка компиляции”, не подскажите как такое возможно ?!
ООО "Мера НН"
скачал последний языковой пакет c++, vs2010, локально все работает, при попытке загрузить сюда пишет “ошибка компиляции”, не подскажите как такое возможно ?!
Очень возможно, не студией ведь на сервере собирается. Попробуйте, как указано, g++ (GCC) 4.7.1.
ООО "Мера НН"
скачал последний языковой пакет c++, vs2010, локально все работает, при попытке загрузить сюда пишет “ошибка компиляции”, не подскажите как такое возможно ?!
И, кстати, по клику на сообщении об ошибке компиляции на странице должно быть видно в чем проблема. Сам не видел, но тут писали.
если еще что нибудь будете править… рассмотрите вот эти правки https://gist.github.com/cNoNim/7340869 если оставлять так как есть то World и PlayerContext не являются POD типами и для них не создается автоматически оператор присваивания… не знаю критично это для кого нить или нет, но все же… + я бы посоветовал, все перечисления объявить как char, например …
«рассмотрите вот эти правки »
Не критично, но, если будем вносить правки в клиент, рассмотрим.
«я бы посоветовал, все перечисления объявить как char»
Это уже микрооптимизация. При 600 элементов и лимите памяти в 256 Мб выигрыш стремится к нулю.
«никакой проблемы хранить cells в сплошном векторе нету»
Это неудобно для участников: вместо передачи x и y им придётся каждый раз конвертировать индексы.
« не проще ли хранить cellVisibilities как std::vector и чуточку подправить функцию isVisible»
А вот с этим непонятно. Каким таким образом мы булевы заменим на CellType?
3Planesoft
Очень нужны конструкторы по умолчанию для model::Trooper, model::Bonus. Сейчас приходится извращаться, чтобы сделать поле с ними, чтобы потом сохранять туда локальную копию. Можно просто наставить дефолтных значений в существующие конструкторы.
«рассмотрите вот эти правки » Не критично, но, если будем вносить правки в клиент, рассмотрим. «я бы посоветовал, все перечисления объявить как char» Это уже микрооптимизация. При 600 элементов и лимите памяти в 256 Мб выигрыш стремится к нулю. «никакой проблемы хранить cells в сплошном векторе нету» …
А вот с этим непонятно. Каким таким образом мы булевы заменим на CellType?
Ой прошу прощения, я имел в виду TrooperStance разумеется. Вы храните вектор из булов для разных стоек, а нужно хранить всего лишь одно значение стойку. При этом поменяв логику хранения. Я написал у себя уже преобразование вашего способа хранения в мой, но я работаю со своими классами, поэтому имхо кодом показывать нет особого смысла
но вот какой получается карта видимости из точки рядом с низким препятствием
https://gist.github.com/cNoNim/7343626
где:
2 это standing, т.е. не видно даже стоящего
1 это kneeling, т.е. видно только стоящего
0 это prone, т.е. не видно только лежащего
-1 видно всех
сравнив это значение с
int minStanceIndex = min(viewerStance, objectStance);
можно делать вывод о видимости
DataArt
Это неудобно для участников: вместо передачи x и y им придётся каждый раз конвертировать индексы. замените getCells на
getCell(int x, int y)
Я вам могу по секрету даже сказать, не обязательно хранить и передавать всю карту. Достаточно передать только четверть, и уже на клиенте только за счет манипуляции с координатами эмулировать через getCell всю карту
DataArt
прошлый коментарий обрезался не правильно, ни как не могу привыкнуть
Это неудобно для участников: вместо передачи x и y им придётся каждый раз конвертировать индексы.
замените getCells на …
Ой прошу прощения, я имел в виду TrooperStance разумеется. Вы храните вектор из булов для разных стоек, а нужно хранить всего лишь одно значение стойку. При этом поменяв логику хранения. Я написал у себя уже преобразование вашего способа хранения в мой, но я работаю со своими классами, поэтому имхо кодом показывать нет особого смысла …
Ага, понятно. Но, раз уж мы говорим о микрооптимизации, то vector внутри себя хранится гораздо более эффективно, чем vector.
Я не вижу каких-либо серьёзных аргументов в пользу переделки: +1% скорости или -1% памяти не учитывается. А усилия приложить придётся.
прошлый коментарий обрезался не правильно, ни как не могу привыкнуть замените getCells на …
Соптимизировать один запрос получения списка ячеек, чтоб усложнить каждый последующий доступ к конкретным ячейкам. Смысл?
Ага, понятно. Но, раз уж мы говорим о микрооптимизации, то vector внутри себя хранится гораздо более эффективно, чем vector. Я не вижу каких-либо серьёзных аргументов в пользу переделки: +1% скорости или -1% памяти не учитывается. А усилия приложить придётся.
vector < bool > чем vector < enum >
Соптимизировать один запрос получения списка ячеек, чтоб усложнить каждый последующий доступ к конкретным ячейкам. Смысл?
а в чем усложнение то, правда считаешь, что переход по массиву массивов дешевле чем посчитать индекс (одно сложение и одно умножение)?
Киев
к чему вообще все эти микрооптимизации? питон изначально проигрывает в быстродействии и оптимизации в разы остальным языкам, но даже он работает достаточно быстро и эффективно. кстати в питоне cell_visibilities не 5ти мерный массив а одномерный :)
DataArt
хз… все этим ‘микрооптимизации’ выльются в ускорение обработки боя в первую очередь на сервере
потому что я думаю на сервере все так же туго с этими ‘микрооптимизациями’
а ускорение обработки выльется в количество боев, которые успеют обработать в раундах
СПбНИУ ИТМО
запускаю compile-java.sh, на выход получаю java-cgdk.jar. Далее пытаюсь его запустить java -jar java-cgdk.jar и тут “no main manifest attribute, in java-cgdk.jar”. Что я делаю не так ?
Поясните, пжалста причину сообщения об ошибке компилляции 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++
и да я бы таки начал с того, что не передавал cells и cellVisibilities каждый move, достаточно в начале игры… но там сами смотрите
Они и не передаются каждый move.
как бы если сделать TrooperStance чаром, то bool ни как эффективней храниться не может… и в место 1 мегобайта передаваемых данных между ранером и стратегией вы будете передавать в 3 раза меньше
vector < bool > хранит данные побитово.
Гимназия №1
Я не очень понимаю. Можно ли на Python 2 использовать те методы, которые описаны в документации (me.getActionPoints), или нужно писать так, как указано в примере (me.action_points)?
Вроде же написано, что по умолчанию в документации все написано для языка Java.
Команда Russian AI Cup
Я не очень понимаю. Можно ли на Python 2 использовать те методы, которые описаны в документации (me.getActionPoints), или нужно писать так, как указано в примере (me.action_points)?
В Питоне нет инкапсуляции, поэтому смысла в методах-аксессорах для полей никакого.
Если вы откроете файл Trooper.py в вашем клиенте, то увидите, что никакого метода getActionPoints там нет.
Как уже выше правильно написали, документация подготовлена для языка Java. В других языках могут быть отличия.
6 ноября 15:30: Обновлены все клиенты. Переименован метод Trooper.getShotCost -> getShootCost. Вот нафига это нужно было?
Многие сочли это опечаткой и просили исправить.
Зачем в с++ делать переменные .x и .y в классе Unit приватными? И во многих других местах тоже. Из-за этого приходится везде писать getX(), getY(), что делает код менее читаемым и делает лишний вызов функций.
Это всё-таки не переменные, а поля. А публичные поля противоречат концепции ООП и практически всем популярным стайл-гайдам. Так что использование аксессоров как раз наиболее правильный вариант.
Конструкторы по умолчанию, скорее всего, добавим.
Яндекс
Может я что-то не так делаю, но под 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
Они и не передаются каждый move.
ну т.е. не передавать каждый ход… они ведь не меняются между ходами, хотя может есть нюансы я не в курсе
vector < bool > хранит данные побитово.
но передаете то вы их чарами…
PS: замечу… я не беспокоюсь о памяти, памяти много я не спорю. основной вопрос количество данных которые вы гоняете между процессами каждый ход
но передаете то вы их чарами… PS: замечу… я не беспокоюсь о памяти, памяти много я не спорю. основной вопрос количество данных которые вы гоняете между процессами каждый ход
Эти матрицы передаются единожды в начале игры. Предлагаемая оптимизация пренебрежимо мало увеличит общую пропускную способность тестирования и поэтому не планируется к внедрению.
DataArt
Эти матрицы передаются единожды в начале игры
если так то все вопрос отпал, просто в локал ранере, и языковых пакетах, это не так, быть может у вас другие языковые пакеты, тогда нет вопросов
если так то все вопрос отпал, просто в локал ранере, и языковых пакетах, это не так, быть может у вас другие языковые пакеты, тогда нет вопросов
С самого начала в пакете C++ переменная cellVisibilities кешировалась, читалась только при первом обращении.
код: vector& RemoteProcessClient::readCellVisibilities() { if (cellVisibilities != NULL) { return *cellVisibilities; } … }
Киев
есть предложение. При заливке стратегии добавить поле коментарий, который виден только автору. Чтобы в него вписывать ключевые моменты, что изменилось. Поле необязательное. Сугубо информационное для автора.
есть предложение. При заливке стратегии добавить поле коментарий, который виден только автору. Чтобы в него вписывать ключевые моменты, что изменилось. Поле необязательное. Сугубо информационное для автора.
Осспади, что мешает завести репозиторий?
Осспади, что мешает завести репозиторий?
Ничего не мешает Но лишнее удобство и ничего более
есть предложение. При заливке стратегии добавить поле коментарий, который виден только автору. Чтобы в него вписывать ключевые моменты, что изменилось. Поле необязательное. Сугубо информационное для автора.
поддерживаю.
здесь может быть Ваша компания! :)
Trooper.ShotCost ошибка компиляции на сайте, локально компилируется
Trooper.ShotCost ошибка компиляции на сайте, локально компилируется
Вы используете устареший языковой пакет — скачайте новый. Метод был переименован для единообразия в getShootCost.
здесь может быть Ваша компания! :)
переименовал в Trooper.ShootCost , скомпилировалось, но вышла ошибка верификации. скаяал новый пакет в 11:23, там нет getShootCost у меня C#
здесь может быть Ваша компания! :)
Как можно узнать по какой причине стратегия не прошла верификацию?
переименовал в Trooper.ShootCost , скомпилировалось, но вышла ошибка верификации. скаяал новый пакет в 11:23, там нет getShootCost у меня C#
Конечно, getShootCost в языковом пакете для C# нет. В этом языки приняты properties, поэтому используется такой код:
public int ShootCost
{
get { return shootCost; }
}
переименовал в Trooper.ShootCost , скомпилировалось, но вышла ошибка верификации. скаяал новый пакет в 11:23, там нет getShootCost у меня C#
У вас ошибки в стратегии, ответил подробнее личным сообщением.
Москва
Было бы здорово, если бы на графике изменения рейтинга как нибудь(вертикальными линиями например) помечался бы момент заливки новой версии. Этого очень не хватало еще в прошлом году.
здесь может быть Ваша компания! :)
можно ли как нибуть узнать сколько процессорного времени и памяти расходует стратегия на сервере?
Петрозаводск
Осспади, что мешает завести репозиторий?
Например отмечать серьезные изменения чтобы потом легче было создавать бои со старыми версиями стратегий
Виснет проект на функции vector RemoteProcessClient::readBytes(unsigned int byteCount) в случае, если запускать local-runner-sync.bat. При этом отображается только отряд “KeyboardPlayer” которым можно управлять. local-runner.bat работает нормально.
Разумеется, он не получит данных, пока не сходит KeyboardPlayer.
Kaspi Bank
Может быть я чего-то не понял, но как использовать, например, аптечку? В методах trooper есть возможность только проверить ее наличие. Спасибо
Белорусский Государственный Университет
Может быть я чего-то не понял, но как использовать, например, аптечку? В методах trooper есть возможность только проверить ее наличие. Спасибо
move.setX(friend.getX()); move.setY(friend.getY()); move.setAction(ActionType.USE_MEDIKIT);
Где move – объект класса Move, передаваемый последним параметром в move()
Севастополь
Java, Возможно вы подумаете над тем, чтоб Strategy и MyStrategy находились в любом именованом пакете? Использовать пакеты со своими названиями нельзя. Хотелось использовать static import , при разделении функциональности, но не могу этого позволить, из-за ограничения на дефолтный пакет без имени.
Университет ИТМО
Будут ли закомментированы методы классов c#. Например в jave увидел полноценное описание методов…
vector < bool > хранит данные побитово.
Вы понимаете, что индексирование на одно лишнее измерение, а затем извлечение бита требует значительно больше процессорного времени, чем сравнение байта в памяти с заданным числом? Разница же по памяти чуть более чем двойная, так как мы заменяем 3 бита на 1 байт и вряд ли лишнего мегабайта, который в современных процессорах помещается в L2, будет жалко, если мы обменяем его на значительное увеличение скорости.
Вы понимаете, что индексирование на одно лишнее измерение, а затем извлечение бита требует значительно больше процессорного времени, чем сравнение байта в памяти с заданным числом? Разница же по памяти чуть более чем двойная, так как мы заменяем 3 бита на 1 байт и вряд ли лишнего мегабайта, который в современных процессорах помещается в L2, будет жалко, если мы обменяем его на значительное увеличение скорости.
Мы не будем заниматься микрооптимизацией, которая в определённых случаях ускоряет быстродействие на проценты. В любом случае, здесь у каждого своё мнение, и это бесконечный процесс, даже если заниматься только C++. А это не единственный язык. Если вы докажете (с данными профайлера), что да, есть такое узкое место, которое легко поправить и получить существенный бонус производительности, то мы это сделаем.
Расширения карты также не будет, так как часть карт уже нарисована.
Мы не будем заниматься микрооптимизацией, которая в определённых случаях ускоряет быстродействие на проценты. В любом случае, здесь у каждого своё мнение, и это бесконечный процесс, даже если заниматься только C++. А это не единственный язык. Если вы докажете (с данными профайлера), что да, есть такое узкое место, которое легко поправить и получить существенный бонус производительности, то мы это сделаем. …
Я просил не карту расширить, а добавить два неиспользуемых столбца к массиву и вычислять адрес, используя константы, а не переменные. Профайлер у меня стоит только на работе и домой ставить я его не буду, но в теории, в моей версии, каждое умножение, использующееся для индексации делается через 1 LEA и 1 SHL . А у вас - по несколько imul. Это не “проценты”, это “в разы”
Я просил не карту расширить, а добавить два неиспользуемых столбца к массиву и вычислять адрес, используя константы, а не переменные. Профайлер у меня стоит только на работе и домой ставить я его не буду, но в теории, в моей версии, каждое умножение, использующееся для индексации делается через 1 LEA и 1 SHL . А у вас - по несколько imul. Это не “проценты”, это “в разы”
Под процентами я имею в виду суммарное время работы. Ускорение “в разы” операции, занимающей 0.1% (условно) от общего времени, ничего не даст.
Ростов-на-Дону
Ахахах. Спасибо, что в паскалевском пакете вы завели константу FREE.
Ахахах. Спасибо, что в паскалевском пакете вы завели константу FREE.
Можно писать WorldControl.FREE.
А вообще - в паскалевском пакете нет ни перечислений, ни свойств. Так и так все во врапперы оборачивать.
Можно писать WorldControl.FREE. А вообще - в паскалевском пакете нет ни перечислений, ни свойств. Так и так все во врапперы оборачивать.
Да оно то писать можно - но только не шибко удобно. Ну и так да, согласен, паскалевский пакет написан паршивенько, проще самому все обернуть. Видно что какой-нибудь сиплюплюс программист писал.
Ростов-на-Дону
Ребяты, а как определить в какую сторону смотрит вражеский боец? :D
Ребяты, а как определить в какую сторону смотрит вражеский боец? :D
У него круговой обзор, так что кто куда смотрит ни на что не влияет.
У него круговой обзор, так что кто куда смотрит ни на что не влияет.
Ну как сказать. Можно же определить из какой клетки он только что перешел, зная направление.
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
Ну как сказать. Можно же определить из какой клетки он только что перешел, зная направление.
когда вам состояние мира возвращают там нигде не указано направление. только при просмотре боя визуально это видно
К сожалению, С++11 обратно не совместим с обширно используемыми версиями C++. Например, используемая библиотека csimplesocket (by Mark Carrier) не компилируется в C++11. По возможности, C++11 будет поддержан, но это не просто добавление флага.
только что попробовал добавить в сборку с помощью GCC флаг -std=c++11
ни каких ошибок не обнаружил,
поддержите пожалуйста флаг С++11
на счет того что С++11 не совместим, как то выглядит не очень правдоподобно, хотя возможно есть нюансы
DataArt
хотя если имеется ввиду что код С++11 не соберется на старом компиляторе, то это как бы очевидно…
но главное ведь, что бы у вас собиралось, а допустим GCC прожует больше языковых конструкций, чем VС++ последней версии
и можно спокойно писать код в VC++ он будет собираться с помощью GCC
а то сейчас приходится себя ограничивать не понятно зачем…
писать код в VC++ 2013 и не использовать хотя бы auto или range based for
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
хотя если имеется ввиду что код С++11 не соберется на старом компиляторе, то это как бы очевидно… но главное ведь, что бы у вас собиралось, а допустим GCC прожует больше языковых конструкций, чем VС++ последней версии и можно спокойно писать код в VC++ он будет собираться с помощью GCC а то сейчас приходится себя ограничивать не понятно зачем… …
у всех свои плюсы и минусы. питон например медленнее всех, про паскаль я вообще молчу, у них и половины нет того, что есть у вас.
Есть информация о поддержке numpy в пакете python?
Да, уважаемые организаторы, рассмотрите, пожалуйста, установку numpy и scipy. Это практически стандартные библиотеки для питона, которых нет из коробки, я уверен, исключительно по недоразумению. Без них питон находится в заведомо неравных условиях с джавой и си. Я прошлом году к второму раунду, когда без ресурсоемких алгоритмов в топе удержатся уже было нельзя, просто забил, не в последнюю очередь из-за отсутствия этих библиотек. Было много идей, но на чистом питоне в ограничения по времени было не реально уложиться.
Не могу понять как получить значение текущего игрового цикла, нашел только Game::getMoveCount(). Или придется самому считать?
Да, уважаемые организаторы, рассмотрите, пожалуйста, установку numpy и scipy. Это практически стандартные библиотеки для питона, которых нет из коробки, я уверен, исключительно по недоразумению. Без них питон находится в заведомо неравных условиях с джавой и си. Я прошлом году к второму раунду, когда без ресурсоемких алгоритмов в топе удержатся уже было нельзя, просто забил, не в последнюю очередь из-за отсутствия этих библиотек. Было много идей, но на чистом питоне в ограничения по времени было не реально уложиться.
МШП
Хм. Локально на Visual Studio компилируется код: move.setAction(ActionType::MOVE); На сервере - нет. Понятно, что можно убрать ActionType:: и все скомпилируется, но на мой взгляд с ним код более читабельный. Можно с этим что-нибудь сделать?
Хм. Локально на Visual Studio компилируется код: move.setAction(ActionType::MOVE); На сервере - нет. Понятно, что можно убрать ActionType:: и все скомпилируется, но на мой взгляд с ним код более читабельный. Можно с этим что-нибудь сделать?
ActionType::MOVE
это не по стандарту… да даже в новом стандарте это верно только для enum class… но в целом если бы был поддержан С++11 можно было бы использовать и enum class. пока же только через костыли
DataArt
если, что
я не прошу переписывать пакеты на С++11
этого не нужно, просто добавить флаг и будет ок
Раз нужно доустанавливать – значит, не стандартное. Кто-то получает профит от сей из-за производительности. А ты получаешь профит от питона из-за скорости разработки.
Да оно то писать можно - но только не шибко удобно. Ну и так да, согласен, паскалевский пакет написан паршивенько, проще самому все обернуть. Видно что какой-нибудь сиплюплюс программист писал.
Не обижайте, пожалуйста, C++ программистов, они плюются на качество и “удобство” API-кода своего языкового пакета не меньше вас, еще с прошлого года. Джава - базовый язык у организаторов.
Не обижайте, пожалуйста, C++ программистов, они плюются на качество и “удобство” API-кода своего языкового пакета не меньше вас, еще с прошлого года. Джава - базовый язык у организаторов.
Я не хочу сказать, что код откровенно плох. С точки зрения стандартной методологии разработки бизнес-софта - все ок. С точки зрения удобства для олимпиадного скоростного геймдевелопмента - не очень.
UWC
А почему вообще не сделать, как в google ai challenge было: все общение алгоритма с программой - через stdin/out? Это снимает кучу проблем с пакетом: кому не нравилась реализация - переписывали сами. И парк языков был намного шире.
Snap Inc.
А почему вообще не сделать, как в google ai challenge было: все общение алгоритма с программой - через stdin/out? Это снимает кучу проблем с пакетом: кому не нравилась реализация - переписывали сами. И парк языков был намного шире.
По-моему так проще, как есть сейчас.
Да и переписать всё со своими классами вам никто не запрещает, а исходный интерфейс использовать лишь как ввод/вывод информации, при чём намного удобнее, чем через stdin/stdout.
По-моему так проще, как есть сейчас. Да и переписать всё со своими классами вам никто не запрещает, а исходный интерфейс использовать лишь как ввод/вывод информации, при чём намного удобнее, чем через stdin/stdout.
+1, так и делаю
Команда Russian AI Cup
А почему вообще не сделать, как в google ai challenge было: все общение алгоритма с программой - через stdin/out? Это снимает кучу проблем с пакетом: кому не нравилась реализация - переписывали сами. И парк языков был намного шире.
Относительно google ai challenge напомню, что там были большие проблемы со скоростью тестирования.
Я не хочу сказать, что код откровенно плох. С точки зрения стандартной методологии разработки бизнес-софта - все ок. С точки зрения удобства для олимпиадного скоростного геймдевелопмента - не очень.
Чем принципиально отличается использование API для C++ от, например, Java? Анализ стратегий участников не выявил существенных отличий в использовании.
Взаимодействие процессов через пайпы (во всяком случае в Windows, но, возможно и всюду) значительно более тормозное чем через сокеты. Общение через сокеты дает возможность без проблем использовать бинарный протокол. Случайный вывод (например, какой-то в редком случае отладочный вывод) в stdout не сломает протокол и не приведет к тому, что стратегия будет считаться упавшей. ...
Кстати, скорость тестирования боёв с солдатами вроде ж как намного быстрее, чем была у танков. Не планируется в связи с этим уменьшить интервалы между боями в песочнице?
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
Кстати, скорость тестирования боёв с солдатами вроде ж как намного быстрее, чем была у танков. Не планируется в связи с этим уменьшить интервалы между боями в песочнице?
Плюсую. К 20 минутам уже привыклось. Да и даст более точные результаты по идее
ООО "Мера НН"
Плюсую. К 20 минутам уже привыклось. Да и даст более точные результаты по идее
Раз в 20 минут вообще было шикарно.
UWC
Взаимодействие процессов через пайпы (во всяком случае в Windows, но, возможно и всюду) значительно более тормозное чем через сокеты. Общение через сокеты дает возможность без проблем использовать бинарный протокол. Случайный вывод (например, какой-то в редком случае отладочный вывод) в stdout не сломает протокол и не приведет к тому, что стратегия будет считаться упавшей. ...
В google ai challenge из-за недостатка мощности сервера (тоже примерно раз в час игра) появились tcp-серверы.
ООО "Мера НН"
Раз в 20 минут вообще было шикарно.
Создал голосовалку насчет частоты боев. Прошу :-) http://russianaicup.ru/forum/index.php?topic=48.0
Я написал обвязку для языка D по аналогии с C++. Есть ли шанс что будет добавлена его поддержка?
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
Я написал обвязку для языка D по аналогии с C++. Есть ли шанс что будет добавлена его поддержка?
В какой то ветке писали что если вы реализуете языковой пакет то шанс есть. А вы пробовали он в локал раннере работает?
А что с рейтингом то произошло такое?
Бета тест кончился. Заново рейтинг считается. Всё нормально
В какой то ветке писали что если вы реализуете языковой пакет то шанс есть. А вы пробовали он в локал раннере работает?
Да, в local-runner’е протестировал.
Maxifier
Очень-очень хочется иметь возможность делать import static для своих классов в Java. В данный момент это, кажется, невозможно. Почему это мне нужно? Я хочу завести свой enum, и много-много использовать его. При этом не хочется каждый раз писать его имя для обращения к полям. Я умею делать это только с помощью import static, но его нельзя делать для классов в default package. Засунуть же свои классы в package тоже не получается - если отправить в зипнике просто все классы, говорит “could not find package…”. Если предварительно засунуть в папку с именем пекеджа, говорит что никаких папок в архиве быть не должно. Можно с этим что-нибудь сделать? Разрешить каким-либо образом свои пакеты, либо вообще в языковом пакете засунуть Strategy и MyStrategy в какой-нибудь пакет. (Или может то чего я хочу можно как-то сделать и без import static?)
Maxifier
Забыл, что в Markdown нужно два перевода строк между абзацами делать =(
МФПУ "Синергия"
Уважаемые JAVA-исты подскажите плз где и как разместить метод от куда будет реализовываться управление? Я как понял из правил вызывается класс move но не совсем понятно какой именно метод, конструктора не нашел, а свой дописать не дает. И есть ли еще какая документация кроме правил?
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
Уважаемые JAVA-исты подскажите плз где и как разместить метод от куда будет реализовываться управление? Я как понял из правил вызывается класс move но не совсем понятно какой именно метод, конструктора не нашел, а свой дописать не дает. И есть ли еще какая документация кроме правил?
вызывается метод move. вам же примеры дали
МФПУ "Синергия"
вызывается метод move. вам же примеры дали
Это тот который в классе MyStrategy?
Это тот который в классе MyStrategy?
Да. Причём для каждого солдатика класс стратегии свой.
Скажите нубу, я так понял, свои внешние функции в Mystrategy.cpp разрешено добавлять. А как насчёт глобальных переменных? Не кидайте помидорами, но если я захочу написать поиск пути для каждого юнита на первом ходу, (а потом идти по нему в остальные) я могу сохранить этот путь в глобальную (или статическую) переменную? Или есть какие-то другие способы? Или пересчитывать путь каждый ход?… простите за нубство
Скажите нубу, я так понял, свои внешние функции в Mystrategy.cpp разрешено добавлять. А как насчёт глобальных переменных? Не кидайте помидорами, но если я захочу написать поиск пути для каждого юнита на первом ходу, (а потом идти по нему в остальные) я могу сохранить этот путь в глобальную (или статическую) переменную? Или есть какие-то другие способы? Или пересчитывать путь каждый ход?… простите за нубство
Не переживай ты так, все когда-то были нубами :) Сохранять все пути может быть не самя лучшая идея т.к. иногда на поле появляются препятствия в виде своих же бойцов. Я бы рекомендовал заниматься такой оптимизацией только когда выяснится что это занимает в алгоритме больше всего времени, и при этом времени уже не хватает. А в приципе можно сохранить в MyStrategy -объект этого класса создается один раз на всю игру.
Очень-очень хочется иметь возможность делать import static для своих классов в Java. В данный момент это, кажется, невозможно. Почему это мне нужно? Я хочу завести свой enum, и много-много использовать его. При этом не хочется каждый раз писать его имя для обращения к полям. Я умею делать это только с помощью import static, но его нельзя делать для классов в default package. Засунуть же свои классы в package тоже не получается - если отправить в зипнике просто все классы, говорит “could not find package…”. Если предварительно засунуть в папку с именем пекеджа, говорит что никаких папок в архиве быть не должно. Можно с этим что-нибудь сделать? Разрешить каким-либо образом свои пакеты, либо вообще в языковом пакете засунуть Strategy и MyStrategy в какой-нибудь пакет. (Или может то чего я хочу можно как-то сделать и без import static?)
Полностью, обоими руками за! Но для этого надо использовать не default package, а это запрещено правилами. А ведь это действительно полезно и удобно Уважаемые учредители - обратите на это внимание.
NEURON GRUP SRL
Ваша стратегия «упала» в коротком проверочном бою 4x3. Процесс стратегии непредвиденно завершился на ходе 0. exit code: -1073741819 что может быть?
Ваша стратегия «упала» в коротком проверочном бою 4x3. Процесс стратегии непредвиденно завершился на ходе 0. exit code: -1073741819 что может быть?
Выход за границы массива, деление на ноль, что угодно… Ошибка выполнения программы, в общем.
NEURON GRUP SRL
функция MyStrategy::move запускается каждый раз для каждой малой итерации пока не закончатся очки действия? и для каждого бойца отдельно? если объявить какие-то переменные, то они будут только для одного? что-то не догоняю…
функция MyStrategy::move запускается каждый раз для каждой малой итерации пока не закончатся очки действия? и для каждого бойца отдельно? если объявить какие-то переменные, то они будут только для одного? что-то не догоняю…
Да, каждый раз, пока не будет вызвано EndMove или кончатся очки, и так для каждого бойца. Используй статические поля.
Очень-очень хочется иметь возможность делать 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
}
}
Вы это имели ввиду? 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
}
}
Ну да. Только то, что вы написали, тоже не компилится.
DataArt
ответьте пожалуйста все же насчет С++11 можно на него рассчитывать или уже все проехали
public class Main { public static void main(String[] args) { Type type = FIRST; if (type == SECOND) { System.out.println(“Oops”); } } enum Type { FIRST, SECOND } } Ну да. Только то, что вы написали, тоже не компилится.
К сожалению да, IDEA не подсказала наличие ошибок.
К сожалению да, IDEA не подсказала наличие ошибок.
Ответьте пожалуйста, можно ли рассчитывать на добавление языкового пакета для D? От этого зависит, на каком языке мне писать стратегию.
ответьте пожалуйста все же насчет С++11 можно на него рассчитывать или уже все проехали
Как мы уже писали выше, с ним всё не так просто. Например, под MinWG 4.7.1 (32-bit) пакет не собирается с -std=c++11. К сожалению в мире С++ это сплошь и рядом - различия возникают не только вокруг разных компиляторов, но и версий одного компилятора, его версий для разных платформ или разрядностей. К сожалению, не всё просто - все ошибки находятся внутри third-party библиотек (с нашим кодом проблем нет). К тому же, кроме того, чтобы заставить собираться этот код под c++11, надо еще убедиться что он работает для разных компиляторов и платформ.
Ответьте пожалуйста, можно ли рассчитывать на добавление языкового пакета для D? От этого зависит, на каком языке мне писать стратегию.
В настоящий момент мы смотрим в ваш пакет. Если он в самом деле не содержит багов, максимально повторяет интерфейсы из других пакетов и вы гарантируете его поддержу во время всего чемпионата в случае необходимости внесения изменений - то да, мы с удовольствием воспользуемся возможностью и добавим пакет. Сейчас еще напишем вам несколько моментов, что нужно для поддержки.
Как мы уже писали выше, с ним всё не так просто. Например, под MinWG 4.7.1 (32-bit) пакет не собирается с -std=c++11. К сожалению в мире С++ это сплошь и рядом - различия возникают не только вокруг разных компиляторов, но и версий одного компилятора, его версий для разных платформ или разрядностей. К сожалению, не всё просто - все ошибки находятся внутри third-party библиотек (с нашим кодом проблем нет). К тому же, кроме того, чтобы заставить собираться этот код под c++11, надо еще убедиться что он работает для разных компиляторов и платформ.
да да я помню ваш предыдущий ответ… но вы просто ответьте, есть ли смысл все таки расчитывать, что С++11 будет, или трактовать ваш ответ как не С++11 не будет и поехали дальше, просто сейчас ситуация какая то не понятная
если С++11 не будет поддерживаться изза каких то проблем связанных с компилятором, можно ли рассчитывать на его поддержку если эти проблемы будут решены, по аналогии с языковыми пакетами других языков?
просто какая то странная ситуация, вроде бы в комментариях проскочила мысль на счет того, что возможно будут введены другие языки, но допустим вот тут D хотят пропихнуть, а реакции особой нет…
в том же духе я могу спросить, можно ли рассчитывать, на введение С++11 как отдельного языка, если я реализую пакет для него, который соберется в нужных вам условиях?
да да я помню ваш предыдущий ответ… но вы просто ответьте, есть ли смысл все таки расчитывать, что С++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++ мы и сами сможем вносить правки.
– В самом деле непонятная. Мы получили несколько сообщений, что пакет собирается под C++11 и тут я убеждаюсь, что нет. Если в ближайшем времени удастся победить сложности, то поддержка возможна. Это не мгновенная операция сделать review кода, рассмотреть возможность поддержки D на серверах, сформулировать требования к пакету и автору. Мы работаем над этим. Вероятно, язык D будет поддержан. …
для того что бы собрать пакет С++ с флагом -std=c++11, в mingw нужно добавить флаг -DWIN32
либо заменить все
#ifdef WIN32
на более правильные
#ifdef _WIN32
надеюсь этого достаточно?
насчет поддержки, и теста, я могу протестировать на всем чем скажете
допустим я собирал уже под линуксом, просто когда вижу gcc я в первую очередь думаю, о линуксе, а не о mingw…
в основном я пишу для конкурса в Visual Studio 2013, так что с ней ни каких проблем точно нет
для того что бы собрать пакет С++ с флагом -std=c++11, в mingw нужно добавить флаг -DWIN32 либо заменить все #ifdef WIN32 на более правильные #ifdef _WIN32 надеюсь этого достаточно? насчет поддержки, и теста, я могу протестировать на всем чем скажете допустим я собирал уже под линуксом, просто когда вижу gcc я в первую очередь думаю, о линуксе, а не о mingw… …
Отлично. Давайте перейдем к общению через личные сообщения для выяснения деталей.
3Planesoft
Вау, если вы добавите C++11, это будет мегакруто! :) cNoNim, жму руку за настойчивость! Поднадоело писать объявления итераторов для циклов, да и другие возможности при необходимости станут доступны.
Вау, если вы добавите C++11, это будет мегакруто! :) cNoNim, жму руку за настойчивость! Поднадоело писать объявления итераторов для циклов, да и другие возможности при необходимости станут доступны.
не то слово надоело… хуже всего то что я такой ленивый что не писал их ))) сижу тут простыни кода на С++11 генерирую, а тут его не хотят поддерживать…. приходится настаивать )))
Долгопрудный
не знаю, где спросить, поэтому спрошу тут =) возможно пригодится не только мне =) файл compilation.log по-видимому в кодировке CP1251, стандартный не жует, нотепад даже с плагином TextFX не жует =) помогает только онлайновые декодэры =) нет ли возможности нормально просматривать этот файл (все делаю под Windows) =) заранее спасибо ^_^
DataArt
не знаю, где спросить, поэтому спрошу тут =) возможно пригодится не только мне =) файл compilation.log по-видимому в кодировке CP1251, стандартный не жует, нотепад даже с плагином TextFX не жует =) помогает только онлайновые декодэры =) нет ли возможности нормально просматривать этот файл (все делаю под Windows) =) заранее спасибо ^_^
эта проблема не файла, а кодировок консоли у тебя скорее всего русская студия, он скорее всего выводит сообщения в кодировке cP1251, но стандартная кодировка консоли в винде CP866 попробуй сделать перед запускам батника, или добавь в сам батник в самое начало
chcp 1251
Москва
Подскажите, как можно выяснить являлось ли превышение лимита времени причиной падения стратегии во время боя? В копии боя при просмотре “репитером” есть информация о превышении лимита времени? или только исключения таким способом можно выловить?
Майкоп
Я новичок в java. Подскажите, чтобы использовать другие коллекции, например List, мне надо дополнительно подключить библиотеку (или как правильно): import java.util.*;
Сейчас там подключено только import java.util.Random; import java.util.Vector;
Вопрос: такое подключение повлияет на размер занимаемой памяти и время работы? И вообще, по правилам, можно ли подключать?
Долгопрудный
эта проблема не файла, а кодировок консоли у тебя скорее всего русская студия, он скорее всего выводит сообщения в кодировке cP1251, но стандартная кодировка консоли в винде CP866 попробуй сделать перед запускам батника, или добавь в сам батник в самое начало chcp 1251
к сожалению не помогло, при добавлении “CP 866” в батник меняется кодировка текста в консоли, но не меняется кодировка текста в лог-файле =)
DataArt
к сожалению не помогло, при добавлении “CP 866” в батник меняется кодировка текста в консоли, но не меняется кодировка текста в лог-файле =)
вы не внимательно читаете, нужно написать в батнике
chcp 1251
а не CP 866
Я новичок в java. Подскажите, чтобы использовать другие коллекции, например List, мне надо дополнительно подключить библиотеку (или как правильно): import java.util.*; Сейчас там подключено только import java.util.Random; import java.util.Vector; Вопрос: такое подключение повлияет на размер занимаемой памяти и время работы? И вообще, по правилам, можно ли подключать?
Само по себе подключение ничему не вредит
БГУ
Уважаемые организаторы, прошу добавить в языковом пакете для 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 чего-нибудь, чтоб не писало ничего при тестировании у вас.
3Planesoft
На сервер еще C++11 не добавили? Вроде в языковых пакетах что-то такое появилось, а при отсылке все равно выдает специфические ошибки.
model.* java не компилируется из-за UTF-8, кажется лучше бы вообще код по английски комментировать - участников было бы больше раза в два
В python 3 тоже такая проблема. Переписываю комментарии
ООО "Мера НН"
Предложение организаторам - добавить в эту статью строчки, которыми компилируется тот или иной пакет, дабы участники в случае мистических ошибок компиляции могли прогнать абсолютно то же самое локально.
Рыбинск
Как да Паскале узнать длину массива troopers после строчки troopers:=world.GetTroopers
Как да Паскале узнать длину массива troopers после строчки troopers:=world.GetTroopers
Length(troopers). Но индексация там с нуля, т.е. от 0 до Length(troopers)-1.
МШП
На Python 2.7 для разных видов своих воинов вызывается разные объекты класса MyStrategy, что не особо удобно и нигде не описано =(
На Python 2.7 для разных видов своих воинов вызывается разные объекты класса MyStrategy, что не особо удобно и нигде не описано =(
Вызываются*
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
На Python 2.7 для разных видов своих воинов вызывается разные объекты класса MyStrategy, что не особо удобно и нигде не описано =(
Вообще то описано и в других языках тоже самое
Фрайбург
Я может где-то сильно недосматриваю, но у меня проект не собирается с -std=c++11, так как не находит такой флаг, зато замечательно собирается с -std=c++0x. Будет ли разница при отсылке стратегии?
Киев
Для языка C++11 В файл Trooper.cpp нужно добавить вначале #include <cstdlib>
чтобы компилятор узнал откуда ему узнать о функции exit
МШП
Да, и как вообще получить экземпляр класса Player, в котором должны хранится ответы на запрос командира?
DataArt
Для языка C++11 В файл Trooper.cpp нужно добавить вначале #include чтобы компилятор узнал откуда ему узнать о функции exit
у вас на каком то компиляторе проблемы с этим?
я тестировал нынешний пакет, на студиях с 2008 по 2013 в MinGW 4.7.1, 4.8.1 в GCC 4.8.1 под линуксом
Киев
у вас на каком то компиляторе проблемы с этим? я тестировал нынешний пакет, на студиях с 2008 по 2013 в MinGW 4.7.1, 4.8.1 в GCC 4.8.1 под линуксом
LLVM, Xcode. Уже разобрался.
Да, и как вообще получить экземпляр класса Player, в котором должны хранится ответы на запрос командира?
world.players
Россия
Качество написанного 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 перед удалением.
Фрайбург
Ребята, подскажите пожалуйста. В с++ вызов getTroopers() возвращает пустоту, хотя мои солдаты стоят один возле другого. Не подскажете что может быть?
Качество написанного 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 и ни у кого я так понимаю нет желания особо глубоко в него лезть, а на счет всего остального, я не думаю что оно хоть сколько нибудь критично сказывается на производительности
другое дело, что было бы круто если б кто нить написал очень качественный пакет для С++… но когда это делать, не сейчас же, сейчас надо стратегией заниматься, а у разрабов тоже много дел наверное
Ребята, подскажите пожалуйста. В с++ вызов getTroopers() возвращает пустоту, хотя мои солдаты стоят один возле другого. Не подскажете что может быть?
getTroopers возвращает ваших солдатов в любом случае…
так что проблема более глобальна
у вас последний пакет С++?
Фрайбург
Кто нибудь под Linux заводил? Как впечатления?
Та вроде бы полет нормальный. Все завелось без проблем. Правда сейчас наблюдается несколько диких багов, однако есть ненулевая вероятность, что это от собственной криворукости. :)
getTroopers возвращает ваших солдатов в любом случае… так что проблема более глобальна у вас последний пакет С++?
Должен быть последний. Вчера только скачал. Эта проблема проявляется не всегда. Я разберусь точно когда она проявляется и не может ли это быть моей ошибкой и напишу еще. Спасибо за достаточно быстрый ответ, как бы там ни было.
iTechArt Group
Можно ли обновить Mono компилятор до .NET 4.5 ? Не хватает [MethodImpl(MethodImplOptions.AggressiveInlining)] !!!!!
ХНУРЭ (бывш. ХИРЭ, ХТУРЭ)
Подскажите, где взять localRunner? В пакете ничего подобного нет.
верхнее меню сайта раздел документация
Ростов-На-Дону
Подскажите, где взять localRunner? В пакете ничего подобного нет.
вверху страницы менюшка документация-local runner
3Planesoft
А для C++11 и C++ пакета можно флаг поддержки SSE2 врубить? :D Надо добавить -march=pentium4. А еще лучше -march=corei7 :)
КубГУ
А для C++11 и C++ пакета можно флаг поддержки SSE2 врубить? :D Надо добавить -march=pentium4. А еще лучше -march=corei7 :)
Тогда уж и интерпретатор Python заменить на PyPy, чтобы нам не так обидно было ;)
ООО Сибтел-крипто
Использую C# пакет. Стоит у меня тот же компилятор что на сервере конкурса. нашел серьезный, непонятный баг, который может убить любую стратегию.
http://russianaicup.ru/forum/index.php?topic=122.0
не понятно что это и как бороться. Хоть бросай конкурс.
Использую C# пакет. Стоит у меня тот же компилятор что на сервере конкурса. нашел серьезный, непонятный баг, который может убить любую стратегию. http://russianaicup.ru/forum/index.php?topic=122.0 не понятно что это и как бороться. Хоть бросай конкурс.
Проблема решена. Возникает только при установленном брекпоинте.
ООО Сибтел-крипто
Сегодня начал делать пакет для actionscript3. : ) надеюсь завтра будет готово.
БГУ
А для Ruby и PHP кто-нибудь взялся пилить или смысла нет? :)
Организаторы писали, что было несколько попыток сделать пакет для Руби, но все скисли. P.S. Может и мне, чисто на поржать, запилить пакет для ANSI C? :)
БГУ
Кстати, о C++ пакете. Я скачал его заново, но по прежнему не нахожу нигде вызова функции void RemoteProcessClient::close()
Наверное, просто так, для красоты, создавалась, выходить из приложения, не закрыв сокеты, нынче модно.
КубГУ
Организаторы писали, что было несколько попыток сделать пакет для Руби, но все скисли. P.S. Может и мне, чисто на поржать, запилить пакет для ANSI C? :)
Ну, почему же только «на поржать»? В муравьях вон был языковой пакет на C и я даже им попользовался, ибо крестов не разумею :) Понятно, что в C нету удобных грелок для пупка и придётся самому строить свои велосипеды, но так на то уж каждый сам себе злое буратино :)
БГУ
Ну, почему же только «на поржать»? В муравьях вон был языковой пакет на C и я даже им попользовался, ибо крестов не разумею :) Понятно, что в C нету удобных грелок для пупка и придётся самому строить свои велосипеды, но так на то уж каждый сам себе злое буратино :)
Если кому-то действительно нужно, займусь созданием C-пакета. Не знаю, впрочем, как к этому отнесутся организаторы. Пока удалил из проекта C++ -ный CSimpleSocket, заменив на минимальную и вроде как мультиплатформенную самописную C-шную обертку.
ООО Сибтел-крипто
Допилил actionscript3 пакет : ) Работает. Пришлось возиться с оберткой для соккета. Блокируемых соккетов нет, пришлось делать лапшу из калбеков, с очередью полей, которые нужно дождаться из сокета. Если не соваться в RemoteClientProcess, то все выглядит как обычно : ) Сейчас попробую на гитхаб выложить. Для запуска требуется Flashdevelop
ООО Сибтел-крипто
https://github.com/Megabyteceer/actionscripts3-cgdk
в папке батник компиляции и запуска на обновление. Для билда требуется FlashDevelop с установленным AIR-sdk.
Для запуска нескольких стратегий нужно ставить уникальный APP_ID в батник run.bat, и точно такой же APP_ID в application.xml
Подскажите, на какой яве (х64 или х32) запускается стратегия на сервере? Сам выяснить не смог: java.security.AccessControlException: access denie…opertyPermission“ ”sun.arch.data.model“ ”read" Но похоже на х32, хотелось бы знать наверняка.
x32
БГУ
А вот и мое упражнение в мазохизме. Языковой пакет для C! https://github.com/noop-dev/c-cgdk
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 тоже ошибок нет. пробовал гуглить, но почти все ответы сводятся к тому, чтобы проверить какие-то настройки проекта, чего я, по понятным причинам, не могу сделать.
Что это может быть?
Мужики, подскажите, что за ерунда… Сколько раз заливал стратегию на Java и все было хорошо, а теперь внес очередные изменения, и при попытке залить, она падает в проверочном бою с такой ошибкой: Вывод стратегии в stdout: java.lang.NoClassDefFoundError: PathFinder at MyStrategy.newTurn(MyStrategy.java:248) ….ну и дальше стек вызовов…. …
Думаю, следует проверить, что PathFinder лежит в том же пакете, что и MyStrategy. И проверьте, действительно существует этот класс в листинге с залитой стратегией.
Думаю, следует проверить, что PathFinder лежит в том же пакете, что и MyStrategy. И проверьте, действительно существует этот класс в листинге с залитой стратегией.
спасибо, подолбавшись с diff-ом с рабочей версией, разобрался… оказалось, в одном из файлов, которые даже не упоминались в эррор логе, была след. строка import javafx.scene.shape.Path; по всей видимости, idea в какой-то момент этот класс добавила в импорт… наверное в автокомплите где-то не тот вариант выбрал или еще что. понятия не имею, за что отвечает этот класс, но я его не использую, и по всей видимости, на серверах он тоже не доступен. не понимаю только, правда, почему они не говорят в ошибке, что проблема в этом… хорошо что diff есть, а то вручную найти было бы нереально…. там одного только моего кода 175кб
БГУ
Было бы неплохо, если бы кто-то, кому это хоть немного интересно, протестировал C-пакет на чем-то кроме VS2012 и gcc на OSX.
КубГУ
Было бы неплохо, если бы кто-то, кому это хоть немного интересно, протестировал 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
КубГУ
Было бы неплохо, если бы кто-то, кому это хоть немного интересно, протестировал 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, <…и тут оно начинает ждать с моря погоды…> …
Я скопировал строку из скрипта для C++. Для чего-то это делалось.. Я также не знаю, зачем, например, отключали часть опций оптимизации. Для мака пришлось статическую убрать, потому что там она просто не поддерживается. То же самое со скриптами вместо мейкфайлов итд.
БГУ
Большой спасибо за проверку, кстати. Мейкфайл я добавлять пока все же не буду, т.к. “уже и так всё работает”, кроме того, там захардкожены имена компилируемых файлов, без учета того, что они могут и добавляться.
КубГУ
Большой спасибо за проверку, кстати. Мейкфайл я добавлять пока все же не буду, т.к. “уже и так всё работает”, кроме того, там захардкожены имена компилируемых файлов, без учета того, что они могут и добавляться.
Не за что, всегда рад :) Про опции только одно предположение — вероятно, сборка бинарника происходит единожды и узлы в кластере обсчёта игр могут иметь неодинаковую конфигурацию. А мейкфайл можно заставить брать вообще все *.c-файлы, заменив строчку с SOURCES на SOURCES=$(shell find -name '*.c')
(это я уже для собственного удовольствия, с аргументом «работает — не трожь» согласен :).