Skip to content
 
 

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

starter-kit

Заготовка для написания ботов CodinGame.com

Инструкция по использованию

  1. Сделайте копию репозитория для конкретной игры.
  2. Пишите код в проекте bot.
  3. Тесты запускайте в проекте tests.
  4. Обобщённые алгоритмы ищите в lib.
  5. builder сделайте стартовым проектом, при каждом запуске он собирает все файлы bot и lib в один файл и копирует его содержимое в буфер обмена.
  6. После окончания соревнования, все новое полезное обобщённое, что можно было бы поместить в lib, оформите в виде pull request к этому репозиторию. Не присылайте реализацию обобщённых алгоритмов поиска, только вспомогательные примитивы, которые могут оказаться полезными в будущем.

Что тут есть?

Общая архитектура решения

  1. ISolver — общая абстркция для алгоритмов поиска.
  2. State — состояние игры, StateInit — часть состояния, которое неизменно и вводится перед началом игры.
  3. StateReader — чтение State и StateInit.
  4. App — точка входа. Создает Solver, организует ввод и вывод.

ISolver

Абстракция позволяет комбинировать разные солверы друг с другом. Некоторым солверам нужен другой солвер, для работы. Можно делать солверы обёртки. Например, вот так можно добавить логгирование 10 лучших найденных решений к любому солверу:

var solver = new MyCustomSolver(new SomeOtherSolver(...), ...).WithLogging(bestSolutionsCountToLog: 10);

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

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

StatValue

Регистрируйте в объекте StatValue наблюдаемые значения случайной величины, а он посчитает матожидание, стандартное отклонение, доверительный интервал для матожидания и т.п.

Вектор

Для того, чтобы код, активно манипулирующий векторами не был громоздким, класс вектора называется супер-кратко: V. В нем реализованы все операции, над целочисленными двумерными векторами, которые обычно нужны.

Из необычного — рассчет времени до столкновения с другим объектом, к которому мы движемся со скоростью speed: double GetCollisionTime(V speed, V obstacle, double radius)

Extension-методы

Много мелочей пригождаются постоянно во многих играх. Они собраны в файле Extensions.cs и оформлены методами расширения.

MaxHeap

Бинарная куча. Её нет в net5, но нужна в некоторых алгоритмах. Вероятно, станет не нужна, когда CodingGame перейдет на net6 с его PriorityQueue.

About

Заготовка для написания ботов CodinGame.com

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages