В прерии сухое лето. Четыре фермера в этом районе понимают, что они могут загнать в угол рынок кукурузы, сжигая урожай своих соседей. Но им нужна стратегия для этого; вот где вы входите.
Ваша задача - написать бота, чтобы рассказать фермерам, что сжигать. Цель состоит в том, чтобы закончить игру с самой большой площадью несгоревших земель. Игровое поле - сетка 32х32. Каждая ячейка может быть одной из следующих:
. - Ground
@ - A bot
# - Ash
W - Wet ground
1,2,3,4,5, or 6 - Fire
Интенсивность огня увеличивается на 1 каждый ход. Как только он станет 3 или выше, он подожжет клетки рядом с ним (по горизонтали или по вертикали). Когда огонь достигает 6, он превращается в пепел.
На каждом ходу боты получают в качестве STDIN следующее: старт бота x, старт бота y, текущая позиция бота x, текущая позиция бота y и доска, разделенные символами новой строки. Пример:
8
22
6
24
................................
................................
................................
.....................1..........
....................1#1.........
...................1#363........
....................16@1........
.....................31.........
................................
.........1.1....................
........15#62...................
........15@2....................
.........32.....................
................................
................................
................................
................................
................................
................................
................................
................................
................................
....4.1.........................
.....1#3........................
.....@3.........................
.....W..........................
................................
................................
................................
................................
................................
................................
(в этом случае вы бот в левом нижнем углу).
Вы должны вывести три символа с необязательным символом новой строки, представляющим следующее:
Ход - один из L, R, U, D, or S (stay)
Действие - одно из B (burn), P (pour water) or X (do nothing)
Направление - одно из L, R, U, D or S
- контролирует ячейку, над которой вы выполняете действие
Огонь не влияет на ботов.
Порядок хода следующий: все боты двигаются; все боты выполняют действия; тогда экологические правила случаются. Если вы будете поливать землю водой, она будет мокрой ( W
) на один оборот. Огонь не распространяется на влажную почву. Если вы наливаете воду на влажную почву, она будет оставаться влажной. Если вы подливаете воду в огонь, она превращается в обычную землю. Вы не можете ничего сделать с пеплом.
Раунды проводятся с 4 ботами одновременно. Раунд заканчивается через 50 ходов или когда один бот выбегает из несгоревшего грунта, в зависимости от того, что наступит раньше. Ваша оценка рассчитывается как количество наземных или влажных ячеек в квадрате 9x9 с центром, где стартовал ваш бот.
Вот пример бота; он выбирает все три буквы случайным образом и, как правило, в конечном итоге сжигает свои собственные поля.
RandomBurner:
#!/usr/bin/env python
import random
print random.choice('LRUDS')+random.choice('BPX')+random.choice('LRUDS')
Правила:
- Нет доступа к файловой системе за пределами вашей собственной папки.
- Вы можете записывать в файлы, если вам нужно хранить постоянные данные между ходами, но не более 1 КБ на бот
- Вы не можете перезаписать чужой бот
- Если вы выведете неверный ход, ваш бот будет сидеть на месте. Если вы выведете неверное действие, ваш бот ничего не сделает.
- Пожалуйста, придерживайтесь общих языков, которые могут быть запущены на OSX или Linux.
Код контроллера можно найти здесь.
Начальные результаты:
Average of 15 rounds:
---------------------
81 Farmer
56 CautiousBot
42 GetOff
41 Visigoth
40 DontBurnMeBro
37 FireFighter
35 Pyro
11 Protector
Обновление : добавлены Farmer, CauptedBot, GetOff, FireFighter и Pyro.
источник
Ответы:
вестгот
Вестгот пытается сжечь своих врагов до основания. Он надеется сделать это прежде, чем кто-либо еще доберется до его земли.
Бег:
python visigoth.py
Это моя первая запись, конструктивная критика приветствуется!
источник
min
я должен был иметьmax
. Я починил это.Ява, Протектор
Попытки окружить его поле забором из пепла.
Изменить: немного улучшена логика. Вероятно, не будет иметь значения.
Поместите в файл с именем
Protector.java
.Компилировать с помощью:
javac Protector.java
Run with:
java Protector
источник
GetOff, Python
GetOff просто хочет сохранить свою землю для себя, и он не боится преследовать этих чертовых ботов по всей своей земле, брызгая их водяным пистолетом, пока они не уйдут. Хотя его собственность не нарушается, он делает все возможное, чтобы его земля не сгорела.
источник
a < b < c
синтаксис работы в Python? Я думал, что оценивает(a < b) < c
, что либо,1 < c
либо0 < c
. Поправь меня, если я ошибаюсь. (Найдено в первом условном цикле бота.)1<3>2
оцениваетTrue
на моей машине (если бы он сгруппировал их, он вернул бы false:1>2
и1<1
есть возможности).Фермер, Ява
Фермер заботится только о своем урожае. Он постоянно следит за своим полем на предмет возможных пожаров или захватчиков.
источник
isFire
вы можете использоватьCharacter.isDigit
вместо этого.Пиро, питон
Поджигатель любит огонь. Поджигатель любит огонь. Пиро живет в огне. Я думаю "Поджигатель из TF2". Поджигатель любит сжигать вещи. Он не сожжет свою территорию, но попытается выбраться из нее, используя простой алгоритм поиска пути.
источник
DontBurnMeBro
Еще одна запись Python. Гарантировано, что не умрешь первым (я думаю).
источник
P
нетW
.FireFighter, Java
Борется со всеми пожарами.
источник
Keeper, Python 2
Можно упростить, но я устал.
Хранитель старается уберечь свое поле от вреда. Если появляется огонь, он спешит к нему и тушит его так быстро, как может.
Я также могу добавить размещение для пожаров.
источник
ValueError: min() arg is an empty sequence
- выдает ошибки, если еще ничего не горит.CauiousBot, Node.js (ES5)
Этот бот выходит и пытается поджечь землю других ботов. Это даже сидит на вершине огня в течение 3 тиков, чтобы скрыть это! Однако нельзя быть слишком осторожным, поэтому он всегда должен быть достаточно близко, чтобы тушить любые пожары на своей земле.
Заметки:
state.json
хранится в его рабочем каталоге, используется для хранения информации о начальных позициях других ботов и определения того, как долго скрывать начавшийся огонь. Это должно быть удалено после завершения раунда (например, когда какой-то бот выиграл). В противном случае бот будет запутан в следующем раунде. (Дайте мне знать, если это нарушает правила.)split
модуль.источник
Error: Cannot find module 'split'
. Я использую Node.js v0.10.30.cd botdir
npm install split
по какой-то причине мне не нравится, что он установлен глобально для меня, но вы можете попробовать это тоже