Вы шар слизи. Естественно, будучи слизью, вы хотите растопить как можно большую площадь. Но есть 3 других слизи, которые хотят сделать то же самое. Кто будет превосходной слизью?
Описание
Все слизи будут собраны на одной арене. Судьи (т.е. контрольная программа) просматривают исчерпывающий список всех возможных комбинаций 4-слизи, размещают их по углам стола и наблюдают, чтобы увидеть, какая слизь вытекает из большей части области.
Ваши слизи могут выполнять одно из 3 действий каждый ход: разбрасываться, прыгать или сливаться. Дальнейшее описание того, что они означают, будет предоставлено в разделе « Вывод ».
Доска / арена
Арена будет квадратной доской (в настоящее время 8x8, но это может измениться в будущем). Вот пример арены развивающейся игры:
11111222
11111444
11.22444
.1222.4.
333.3244
33333.44
333...44
333....4
Слизь представлена числами от 1 до 4 (игроки от 1 до 4), а пустое пространство представлено точкой ( .
). Первоначально доска начинается как все пустое пространство, за исключением одной единицы слизи игрока 1 в верхнем левом углу, игрока 2 в верхнем правом углу, игрока 3 в нижнем левом углу и игрока 4 в нижнем правом углу.
Координаты представлены на основе 0 индексом строки и столбца для удобства чтения в коде. Например, координаты (3, 6) представляют 7-й квадрат в 4-й строке (в приведенном выше примере, а 4
). (Это облегчает доступ к квадратам:. board[coords.x][coords.y]
) Вот наглядная иллюстрация:
(0, 0) (0, 1) (0, 2)
(1, 0) (1, 1) (1, 2)
(2, 0) (2, 1) (2, 2)
вход
Ввод вашей программы будет указывать, какой вы игрок (1, 2, 3 или 4), запятая ( ,
), затем содержимое поля / арены (с символами новой строки, замененными запятыми). Например, если бы вы были игроком 3 в вышеприведенном сценарии, ваш ввод будет:
3,11111222,11111444,11.22444,.1222.4.,333.3244,33333.44,333...44,333....4
Выход
Ваша программа должна вывести 4 целых числа. Первые два - это индекс строки и столбца соответственно слизи, которую вы хотите переместить, а следующие два - индекс строки и столбца, куда вы хотите их переместить.
На каждом ходу у вас есть три варианта: разложить, прыгнуть или слить.
распространение
Чтобы распространиться, координаты цели должны быть точно на один квадрат от перемещаемой слизи, а квадрат в координатах цели должен быть пустым. При распространении создается новая слизь по целевым координатам, а старая слизь не удаляется. После создания новой слизи все вражеские слизи на 8 клетках вокруг этой новой слизи конвертируются в игрока, который двигался.
Например, с доской на рис. 1, если игрок 1 должен был вывести
0 1 1 2
, результатом будет доска на рис. 2.1. 2. 11.22 11.12 1..22 1.112 ..22. ..11. ..... .....
Прыгать
Чтобы прыгать, координаты цели должны находиться ровно в двух квадратах от перемещаемой слизи, а квадрат в координатах цели должен быть пустым. При jupming новая слизь создается в координатах цели, а старая слизь удаляется. После создания новой слизи все вражеские слизи на 8 клетках вокруг этой новой слизи конвертируются в игрока, который двигался.
Например, с доской на рис. 1, если игрок 1 должен был вывести
0 1 2 3
, результатом будет доска на рис. 2.1. 2. 11..2 1...2 1...2 1...1 ....2 ...11 ...22 ...11
Объединить
Чтобы объединить, координаты цели должны быть точно на один квадрат от перемещаемой слизи, а квадрат в координатах цели должен быть той же слизью игрока. При слиянии старая слизь удаляется. Затем все пустые места в 8 квадратах вокруг целевой слизи преобразуются в игрока, который переместился (не включая перемещенную старую слизь).
Например, с доской на рис. 1, если игрок 1 должен был вывести
0 1 1 2
, результатом будет доска на рис. 2.1. 2. 11..2 1.112 1.1.2 11112 ....2 .1112 ..222 ..222
Вы также можете передать, просто выводя неверные координаты (например 0 0 0 0
).
Правила и ограничения
Дополнительные правила:
- Вы можете читать и записывать файлы в своей собственной папке, чтобы сохранить данные (материалы будут храниться в них
players/YourBotName/yourBotName.language
), но вы не можете изменять или получать доступ к чему-либо еще, кроме него. Доступ в интернет запрещен. - Ваше представление не может быть закодировано специально, чтобы помочь или навредить другому представлению. (У вас может быть несколько заявок, но они никоим образом не должны взаимодействовать друг с другом.)
- Ваша подача должна занимать не более 0,1 секунды за ход. Если ваше представление иногда занимает 0,105 секунды, это нормально, но оно может не всегда значительно дольше, чем этот срок. (Это в основном проверка работоспособности, чтобы избежать слишком длительного тестирования).
- Ваша заявка не должна быть точной копией (то есть использовать точно такую же логику) другой, даже если она на другом языке.
- Ваша заявка должна быть серьезной. Это основано на мнении, но если ваша заявка явно не пытается решить задачу (например, если вы проходите каждый ход), она будет дисквалифицирована.
Если ваша заявка нарушает какое-либо из этих правил или не соответствует спецификации, она будет дисквалифицирована, удалена playerlist.txt
и игра будет перезапущена с самого начала. Если ваша заявка будет дисквалифицирована, я оставлю комментарий к вашему сообщению с объяснением причин. В противном случае ваша заявка будет добавлена в таблицу лидеров. (Если вы не видите свое представление в списке лидеров, не имеете пояснительных комментариев к своему сообщению и опубликовали свое представление до того времени, как "Последнее обновление" ниже, сообщите мне! Возможно, я случайно пропустил это.)
В вашей заявке, пожалуйста, укажите:
- Имя.
- Командная оболочка для запуска программы (например,
java MyBot.java
,ruby MyBot.rb
,python3 MyBot.py
и т.д.).- Обратите внимание, что входные данные (ваш игрок и карта) будут добавлены в качестве аргумента командной строки.
- Программы будут тестироваться на Ubuntu 14.04, поэтому убедитесь, что ваш код может быть запущен (свободно) на нем.
- Номер версии, если ваш код работает по-разному на разных версиях вашего языка.
- Код вашего бота.
- Инструкция по компиляции кода, если это необходимо.
Контроллер кода / тестирование, пример бота
Код контроллера написан на C ++ и может быть найден на Github . Дополнительные инструкции по запуску и тестированию вашего кода можно найти там.
simplebot.rb
Очень простой бот, который распространяет или перепрыгивает случайную слизь в случайное место каждый ход, также размещен на Github .
Скоринг и таблица лидеров
Когда все квадраты на доске заполнены, игра заканчивается и подсчитываются очки. Окончательный результат игрока - это количество квадратов, содержащих их слизь в конце игры. Если прошло 2000 ходов (500 для каждого игрока), и игра все еще не закончена, игра все равно закончится, и результаты будут сообщаться, как если бы игра закончилась.
В конце турнира результаты всех игр будут усреднены, чтобы рассчитать окончательный счет каждого игрока, который будет размещен в таблице лидеров. Нет крайнего срока подачи заявок; Я буду продолжать обновлять таблицу лидеров по мере поступления новых заявок.
Требуется 4 представления, пока не появится реальная таблица лидеров.
+--------------------------+-----------+--------------------+
| Name | Avg Score | Last Updated (UTC) |
+--------------------------+-----------+--------------------+
| GreedySlime | 47.000 | Jul 22 10:27 PM |
| Jumper | 12.000 | Jul 22 10:27 PM |
| ShallowBlue | 5.000 | Jul 22 10:27 PM |
| Lichen | 0.000 | Jul 22 10:27 PM |
+--------------------------+-----------+--------------------+
Последнее обновление: 22 июля, 22:27 (UTC).