Записи сейчас закрыты. Любые новые записи или изменения не будут засчитаны в финальном прогоне.
Присоединяйтесь к чату!
Вызов
Постарайтесь наполнить холст как можно большим количеством краски. Будьте осторожны с другими ботами, которые могут закрасить вашу тяжелую работу!
Примечание. В этом описании задания под краской подразумевается изменение цвета квадрата на сетке и его неокрашенность. означает, что квадрат на сетке имеет цвет 0 и не относится ни к одному из ботов.
вход
Ваша функция получит четыре аргумента: себя, сетку, положение всех ботов на сетке и информацию об игре.
Себя
Это 1D массив , который обозначает цвет и положение на сетке: [id, xpos, ypos]
.
Верхний левый угол сетки - это позиция (0, 0)
. Позиция (1,0)
справа от этого и позиция (0,1)
ниже
Ваш идентификатор - это целое число, которое является синонимом вашего цвета (см. Ниже, чтобы узнать, как ваш идентификатор влияет на то, как вы рисуете сетку). Ваш идентификатор уникален для вашего бота.
сетка
Это 2D массив, который содержит целые числа, которые говорят вам, какого цвета каждая ячейка. Если номер ячейки сетки равен 0
, это означает, что ячейка неокрашена. Если номер ячейки сетки является целым числом x
, это означает, что ячейка была нарисована ботом с идентификаторомx
.
Чтобы получить цвет сетки в позиции (x, y)
, используйте массив следующим образом:grid[x][y]
.
Боты
Это массив, который содержит информацию о положении ботов. Каждый элемент массива ботов является массивом, который описывает каждого бота и выглядит следующим образом: [id, xpos, ypos]
где id
идентификатор бота, xpos
это позиция бота в х иypos
по оси у.
Этот массив включает в себя позицию и идентификатор вашего собственного бота. Уничтоженные боты не будут включены в этот массив.
Информация об игре
Это массив, содержащий информацию о текущей игре и выглядит следующим образом: [roundNum, maxRounds]
где roundNum
номер текущего раунда (1-индексированный) иmaxRounds
количество раундов в текущей игре.
Выход
Вывод должен быть строкой, возвращаемой вашей функцией. Это команда движения.
Команда движения определяет ваш следующий ход. Доступные команды:
up
down
left
right
wait
Всякий раз, когда вы двигаетесь, вы рисуете квадрат, на который вы двигаетесь. (Смотрите ниже для получения дополнительной информации)
где wait
означает, что вы не двигаетесь. (но вы рисуете квадрат, на котором вы остаетесь)
Если вы попытаетесь выйти за пределы сетки, ваша команда будет проигнорирована, и вы останетесь на том же месте.
Окраска сетки
Всякий раз, когда вы двигаетесь к квадрату, вы рисуете его, но есть правила, которые определяют, каким будет цвет этого квадрата.
Если квадрат неокрашен (0), тогда вы просто окрашиваете его в тот же цвет, что и ваш собственный идентификатор. Однако, если квадрат был нарисован ранее (не ноль), то результирующий цвет квадрата будет найден в соответствии со следующим кодом JavaScript:
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
Эта формула сделана так, чтобы позволить боту перемещаться по своему собственному цвету, не перекрашивая его.
устранение
Если после 5-го раунда у вас будет нарисован один или меньше квадратов (количество квадратов на сетке того же цвета, что и у вас), то вы будете устранены. Это означает, что вы больше не будете в игре и автоматически проиграете.
правила
- Ваш код должен быть функцией типа
function(myself, grid, bots, gameInfo) {
// Code here
return move;
}
- Сетка будет квадратом длины стороны
- Чтобы предотвратить нацеливание определенных ботов, идентификаторы ботов будут случайными.
- Когда два бота занимают одно и то же пространство, цвет этого пространства будет неокрашенным.
- Движение пошаговой т.е. во время раунда, все боты снабжены идентичными
grid
,bots
иgameInfo
аргументами
- Вы можете создать не более трех ботов
- Боты могут работать вместе, но не должны общаться друг с другом и не будут знать идентификаторы друг друга. Победы будут вручаться индивидуально, а не в команде.
- Вы не должны создавать бота, который намеренно предназначается для одного, предварительно выбранного бота. Вы можете, однако, нацелиться на тактику общего класса ботов.
- Ваш бот может хранить данные в
window.localStorage
. Каждый бот должен использовать свой собственный объект данных. Если будет обнаружено, что бот читает данные другого бота (случайно или преднамеренно), он будет дисквалифицирован, пока проблема не будет решена. - Если ваш бот использует случайные числа, используйте
Math.random()
контроллер
Контроллер можно найти здесь:
https://gist.github.com/beta-decay/10f026b15c3babd63c004db1f937eb14
Или вы можете запустить его здесь: https://beta-decay.github.io/art_attack
Примечание. Я бы посоветовал вам проводить любое тестирование в автономном режиме (загрузить контроллер из системы), поскольку веб-страница может быть изменена в любой момент.
Когда все боты будут добавлены, я буду запускать 10 000 игр с урезанным контроллером без графического интерфейса. Вы можете запустить его здесь: https://beta-decay.github.io/art_attack/fast
выигрыш
Игрок, который заполнил большую часть холста, побеждает в игре (игра состоит из 2000 раундов). В случае ничьей выигрывают все ничьи.
Игрок, выигравший наибольшее количество из 10 000 игр, выигрывает соревнование.
Предполагается, что 10 000 игр будут запущены в следующий понедельник (2018-08-27 в 23:00 UTC + 1).
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
формулой, независимо от того, удастся ли боту удастся ли ему закрасить крупных конкурентов (или закрасить). Также примите во внимание троллей / охотников, которые могут в одиночку уничтожить бота по своему выбору. В любом случае, это будет в среднем на 10000 игр.
[botColour, 0, floorColour][Math.abs(botColour - floorColour)%3]
на английский, пожалуйста?