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

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

Раунд 1: до начала

Проект

Песочница

Раунд 1

Раунд 2

Финал

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

19 декабря 06:55: Scarlet написал комментарий в посте Быстрый старт
19 декабря 06:47: Scarlet написал комментарий в посте Правила
19 декабря 06:41: Scarlet написал комментарий в посте Быстрый старт
19 декабря 02:22: 6eJIa9IzZzTeHb написал комментарий в посте Языковые пакеты
19 декабря 02:19: 6eJIa9IzZzTeHb написал комментарий в посте Языковые пакеты
19 декабря 01:43: KKH написал комментарий в посте Языковые пакеты
19 декабря 00:59: romasffm написал комментарий в посте Быстрый старт
19 декабря 00:54: romasffm написал комментарий в посте Быстрый старт
19 декабря 00:41: romasffm написал комментарий в посте Быстрый старт
19 декабря 00:33: alkozel написал комментарий в посте Быстрый старт

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

Telegram-чат

 

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

Язык Версия компилятора Ссылки
C++17 GNU C++ 8.2 скачать
Java Open JDK 1.8 скачать
C# .NET Core 2.1 скачать
Python3 Python 3.7.1 скачать
Ruby Ruby 2.5.3 скачать
Kotlin Kotlin скачать
Rust Rust 1.30 скачать

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



GoodDalek

GoodDalek

АлтГУ

Для сишников надо инструкцию (для Visual Studio): 1. Подключить в проект все исходные файлы пакета 2. Подключить только 4 заголовочных файла корневой папки 3. В свойствах проекта linker (компоновщик) -> input (ввод) -> additional dependencies (дополнительные зависимости) добавить ws2_32.lib

17.12.2018 8:07:39
DevKirill

DevKirill

УрФУ

Раньше в пакетах у полей было описание из правил

17.12.2018 9:10:31
GS

GS

Тюмень

А где же поддержка FreePascal?

17.12.2018 11:54:28
m4shell

Можно ли добавить Python2? В быстром старте он заявлен, а тут отсутствует…

17.12.2018 14:21:55
andrey.chernov

andrey.chernov

Сергиев Посад

А можно пример на руби? :)

17.12.2018 18:04:11
obabichev

obabichev

МФТИ

Попытался запустить языковой пакет с c++, но наткнулся на несколько проблем, возможно я просто не нашел инструкции, но я вроде все разделы уже обошел, в основной документации тоже ничего про это нет. - В пакете отсутствует система сборки проекта, ни make-файла, ни cmake-файла в архиве нет, проектной папки для idea тоже нет, как следствие ide ничего не подтягивает и собрать проект не может. - Нет инструкции по запуску собранного файла (пока скрипты ругаются просто на отсутствие файла output/MyStrategy) в предположении, что я его таки собрал. Я догадываюсь, что это надо делать в докере, но докеры собирать мне не приходилось, как следствие - это боль. docker build и docker run я осилил, контейнер создался, но дальше ничего не происходит….

17.12.2018 22:08:53
pandafas

pandafas

Минск

Языковой пакет С++, (дома винда 10ка и vs2017). Локально сбилдил (пару часов помучавшись перед этим), Сделал смартгая (перенёс с растовского примера), даже локалраннером запустился, игрок один побежал и забил гол. Залил версию на сервер, её приняли, но во время игры игроки тупо стоят… Что-то не так с плюсами на сервере?

18.12.2018 2:16:15
Adler

Adler

Дзержинск

pandafas

pandafas

Минск

Языковой пакет С++, (дома винда 10ка и vs2017). Локально сбилдил (пару часов помучавшись перед этим), Сделал смартгая (перенёс с растовского примера), даже локалраннером запустился, игрок один побежал и забил гол. Залил версию на сервер, её приняли, но во время игры игроки тупо стоят… Что-то не так с плюсами на сервере?

если бы с С++ пакетом было что-то не так, то все стратегии на с++ были бы ниже середины топа

18.12.2018 2:49:24
MikeWazowski

MikeWazowski

Москва

Open JDK 1.8 - это наверно linux’овый java-1.8.0-openjdk ? Для win10 берем Oracle JDK 11.0.1 или будут другие рекомендации ?

18.12.2018 10:43:46
Scarlet
Adler

Adler

Дзержинск

если бы с С++ пакетом было что-то не так, то все стратегии на с++ были бы ниже середины топа

Вообще-то первая стратегия на плюсах, аж на 47 месте. И у меня такая же проблема - перенёс стратегию из квик старта, заливаю на сайт, а роботы большей частью стоят, хотя есть несколько игр, где они реально играют. Даже стравливал две одинаковые - с одной стороны стоят, с другой играют. Так что есть где-то какой-то подвох… (кривые руки?) Сегодня такая же стратегия (с парой изменённых констант) уже не проходит верификацию.

18.12.2018 11:03:27
ardt2

А нельзя ли для C++ сделать структуру(или класс), содержащую эти поля, отдельно и производить структуры Robot и Ball от неё?

structure Entity {
    double x;
    double y;
    double z;
    double velocity_x;
    double velocity_y;
    double velocity_z;
    double radius;
}
structure Ball : public virtual Entity { };     structure Robot : public virtual Entity { }

18.12.2018 12:03:11
AlexKol

А нельзя ли для C++ сделать структуру(или класс), содержащую эти поля, отдельно и производить структуры Robot и Ball от неё? structure Entity { double x; double y; double z; double velocity_x; double velocity_y; double velocity_z; double radius; } structure Ball : public virtual Entity { }; structure Robot : public virtual Entity { }

Переопределите свои объекты и всё.

18.12.2018 12:14:41
ardt2

Переопределите свои объекты и всё.

Да я-то всё могу, но так было бы удобнее )) Не надо было бы писать свои конструкторы преобразования для Ball, Robot, Nitro, например. И вообще, глупо выглядит дублирование полей в классах в С++ 17

18.12.2018 12:21:26
AlexKol

Да я-то всё могу, но так было бы удобнее )) Не надо было бы писать свои конструкторы преобразования для Ball, Robot, Nitro, например. И вообще, глупо выглядит дублирование полей в классах в С++ 17

А ты работал на реальных проектах, с реальными сторонними библиотеками?))) Всем не угодишь

18.12.2018 12:32:37
ardt2

А ты работал на реальных проектах, с реальными сторонними библиотеками?))) Всем не угодишь

Работал, поэтому и печаль. А здесь, естественно было бы попросить так сделать, чтобы не писать операторы присваивания для каждого класса отдельно, например. И вообще, надо продвигать хорошие практики. Здесь проект маленький, но всё равно, когда пишешь

class MyRobot : public Vector3 {};

потом

class MyStrategy : public Strategy, public MyRobot {};

потом

class MyNitro :  public Vector3 {}

то хочется перенести “public Vector3” в базовый класс Unit, например

Так и здесь, приходится писать отдельно операторы присваивания и преобразования для всех структур отдельно. Это и в Си с классами тов. Страуструпа бы смотрелось глупо. (

18.12.2018 12:44:06
AlexKol

Работал, поэтому и печаль. А здесь, естественно было бы попросить так сделать, чтобы не писать операторы присваивания для каждого класса отдельно, например. И вообще, надо продвигать хорошие практики. Здесь проект маленький, но всё равно, когда пишешь class MyRobot : public Vector3 {}; потом …

Я пока даже стратегию не думал, пока всё привел в красивый вид.

18.12.2018 12:46:18
ardt2

Я пока даже стратегию не думал, пока всё привел в красивый вид.

Да. ( Но вот так грустно дублировать.

    // --------------------------------------------------
    virtual Vector3& operator = (const Robot& r)
    {
       X = (float)r.x; Y = (float)r.y; Z = (float)r.z;
       return *this;
    }
    // --------------------------------------------------
    virtual Vector3& operator = (const Ball& r)
    {
       X = (float)r.x; Y = (float)r.y; Z = (float)r.z;
       return *this;
    }

18.12.2018 12:52:00
Ne0

Вообще-то первая стратегия на плюсах, аж на 47 месте. И у меня такая же проблема - перенёс стратегию из квик старта, заливаю на сайт, а роботы большей частью стоят, хотя есть несколько игр, где они реально играют. Даже стравливал две одинаковые - с одной стороны стоят, с другой играют. Так что есть где-то какой-то подвох… (кривые руки?) Сегодня такая же стратегия (с парой изменённых констант) уже не проходит верификацию.

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

18.12.2018 13:42:05
imsohate

imsohate

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

поддержка numpy для python планируется или ее точно не будет?

18.12.2018 15:18:01
alkozel

alkozel

Калужский филиал ГУ СДА при Спецстрое России

А константы из правил, нужно ручками присваивать? И отслеживать их изменение?

18.12.2018 15:55:17
httpps

httpps

Каменск-Уральский

Ne0

Ne0

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

Аналогичная проблема на Ruby, в локал ранере все отлично работает за обе стороны, на сайте - стоят на месте

18.12.2018 17:12:23
Counterbalance

Counterbalance

Нидерланды

In C++, is it true that I cannot modify Runner.cpp and Strategy.h? I would like Runner.cpp to work like this:

void Runner::run() { 
    ....
    while ((game = remoteProcessClient.read_game()) != nullptr)
         remoteProcessClient.write( strategy->calc(*rules, *game) );
}

I want to do 1 calculation for all robots at the same time. The only possible way seems to be to do that calculation when strategy->act is called for the first time in a tick, using a hack like this:

void MyStrategy::act(const Robot& me, const Rules& rules, const Game& game, Action& action) {
    int firstid = -1;
    for (const Robot& robot : game.robots) if (robot.is_teammate) { firstid = robot.id; break; }
    if (me.id == firstid) commands = calc(rules, game);
    action = commands[me.id];
}

18.12.2018 18:22:37
ardt2
Counterbalance

Counterbalance

Нидерланды

In C++, is it true that I cannot modify Runner.cpp and Strategy.h? I would like Runner.cpp to work like this: void Runner::run() { …. while ((game = remoteProcessClient.read_game()) != nullptr) remoteProcessClient.write( strategy->calc(*rules, *game) ); } I want to do 1 calculation for all robots at the same time. The only possible way seems to be to do that calculation when …

First, it’s true. Server will ignore mods to The Runner.

Second, it’s a known puzzle. )) And it has got a very simple solution. I’d believe you’ll find it and thus do not want to spoil.

18.12.2018 18:57:35
ardt2
Counterbalance

Counterbalance

Нидерланды

In C++, is it true that I cannot modify Runner.cpp and Strategy.h? I would like Runner.cpp to work like this: void Runner::run() { …. while ((game = remoteProcessClient.read_game()) != nullptr) remoteProcessClient.write( strategy->calc(*rules, *game) ); } I want to do 1 calculation for all robots at the same time. The only possible way seems to be to do that calculation when …

If it will be frustrating and nessesary, thought, I’ll give the solution. )

18.12.2018 19:04:27
Dimon777

Dimon777

Тула

alkozel

alkozel

Калужский филиал ГУ СДА при Спецстрое России

А константы из правил, нужно ручками присваивать? И отслеживать их изменение?

Тоже интересует данный вопрос…

18.12.2018 21:24:13
olsh

olsh

Архангельск

Включите пожалуйста для C# версию языка 7.3

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <LangVersion>7.3</LangVersion>
  </PropertyGroup>

18.12.2018 21:28:15
alkozel

alkozel

Калужский филиал ГУ СДА при Спецстрое России

Изучаю пример из “Быстрого старта”. Rust не видел до сего момента. Изучаю Java, не пойму как реализовали интерфейс impl Entity for Robot. Это возможно потому что движок на Rust? Правильно ли я понимаю, что на Java такая реализация не получится без создания собственного класса?

18.12.2018 21:42:30
awesoon

awesoon

ONER

alkozel

alkozel

Калужский филиал ГУ СДА при Спецстрое России

Изучаю пример из “Быстрого старта”. Rust не видел до сего момента. Изучаю Java, не пойму как реализовали интерфейс impl Entity for Robot. Это возможно потому что движок на Rust? Правильно ли я понимаю, что на Java такая реализация не получится без создания собственного класса?

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

18.12.2018 23:28:24
KKH

KKH

Химки

Не понятно во что собирать C++ проект. В OBJ файл ? И куда его потом подсовывать ? Скачал себе codeball2018-windows/codeball2018.exe Куда и что подкладывать к этому симулятору ?

19.12.2018 1:43:14
6eJIa9IzZzTeHb

6eJIa9IzZzTeHb

ЗНТУ

У кого-то есть идеи, как запустить С++ через компилятор без докера?

19.12.2018 2:19:38
6eJIa9IzZzTeHb

6eJIa9IzZzTeHb

ЗНТУ

GoodDalek

GoodDalek

АлтГУ

Для сишников надо инструкцию (для Visual Studio): 1. Подключить в проект все исходные файлы пакета 2. Подключить только 4 заголовочных файла корневой папки 3. В свойствах проекта linker (компоновщик) -> input (ввод) -> additional dependencies (дополнительные зависимости) добавить ws2_32.lib

Спасибо

19.12.2018 2:22:26