Ваш приятель-геолог чуть не пнул дверь вашего кабинета, когда он ворвался, широко раскрыв глаза от волнения, и попросил вас пойти с ним на место, которое он только что обнаружил. По дороге он объясняет, что он думает, что он буквально просто ударил золото. Единственная проблема в том, что он похоронен глубоко под землей в пещере с очень неустойчивой крышей. Это слишком опасно, чтобы заплакать, поэтому он хочет, чтобы вы запрограммировали одного из его роботов, исследующих пещеру, собирать столько золота, сколько он может, прежде чем он соберет его обратно. Он также упоминает, что он исследовал пещеру и обнаружил дикую природу, которая может быть вредна для роботов, а также что он уронил там какое-то оборудование, которое еще можно было бы использовать. Каждый робот оснащен двумя руками и рядом датчиков. Когда вы прибываете на место происшествия, он говорит, что планирует набрать больше кодеров,
Теперь до мелочей. Датчики передают информацию в вашу программу в виде символов ASCII. Вот список того, что означает каждый персонаж, и описания всего, что бот может встретить в пещере:
Code Name/Description
Y Your bot
You do things
@ Other bots
They do other things
- Ground
This doesn't do things
C Centipede
These will bite you and leave a poison effect
The bite will cost 1 health
The poison effect will last for 3 turns, costing 2 health each turn
B Bats
If bats end up in the same space you are, your bot runs in a random direction during its turn rather than what you told it to do
L Lion (because reasons)
Lions deal heavy damage, 10 health, each time they attack
F Food
Eating this will give you 5 health
Can only be used once
W Water
Drinking this will cure poison effects early
Can only be used once
R Revealer
This will increase the range of your visibility to an 11x11 grid
The extra range will only be 75% correct, but the original range won't be effected
K Knife
You do twice as much damage to other bots if you have a knife
G Gold
The whole reason you're doing this in the first place
N Nurse Nina
She mend you good
Restores your health by 10 while you occupy the same space as her
} Boulder
You can't walk over boulders, and neither can anything else
P Pit
If you fall in a pit, you will be stuck for 3 turns
Размер пещеры увеличивается в зависимости от количества участвующих ботов. Он начинается с 30х30, и он получает дополнительные 10х10 за каждого бота. Таким образом, 2 бота будут исследовать пещеру 50x50.
Боты начинают с 20 здоровья, но у них нет максимального ограничения здоровья.
Входные данные:
Вы получите вход через STDIN в следующем формате:
20,5,10,1,0,True,False <-health, number gold pieces, number of turns your bot has lasted, number of until the poison wears off, number of turns until you are no longer stuck in a pit, if you have a revealer, if you have a knife
-----
-G}--
--Y-L
-C---
---B-
Первая строка содержит информацию о вашем боте, а остальные - это сетка, которую может видеть ваш бот. Если ваш бот против одной из 4 стен пещеры, вы получите сетку, которая выглядит примерно так (в случае, если вы находитесь на западе):
---
}--
Y--
---
---
Пещера не оборачивается, как и ваше зрение. Стены пещеры не обозначены, единственный признак того, что ваш бот получает, что он приближается к стене, - это уменьшение его вида. С Revealer вы можете получить что-то вроде этого:
--------C--
LW--------B
---K-N-----
--------BR-
-F---------
--B--Y---@N
-W@---F----
------K-F--
----@-}----
R@---G}--}-
--------G-R
Вывод:
Вы получаете два хода за ход, которые выводите в следующем формате:
MNNANW <- Moves are groups of 3 characters representing the action and the direction
Возможные действия:
M Move - Move your bot in the specified direction
A Attack - Attack the square in the specified direction
H Hold - Do nothing
Возможные направления:
NN - North (up)
NE - Northeast (up-right)
EE - East (right)
SE - Southeast (down-right)
SS - South
SW - Southwest
WW - West
NW - Northwest
Ходы применяются слева направо.
Повороты:
Поворачивает прогресс следующим образом:
Ядовитые эффекты применяются к любому игроку, который был отравлен
Не-боты двигаются и атакуют
2а. Львы, Многоножки и Летучие мыши двигаются случайно
2b. Львы и Многоножки будут атаковать все, что непосредственно прилегает к нему (в том числе по диагонали)
2с. Эффект летучей мыши будет применяться только к боту, если он находится в том же пространстве, что и летучая мышь
2d. Медсестра Нина останется в локации на 3 хода, а затем прыгнет в случайную локацию.
Боты движутся
3a. Если ваш бот выдает неверный вывод, он не будет двигаться
3b. Ваш бот будет пытаться подобраться как можно ближе к месту, обозначенному выводом (см. Примечание внизу для более подробной информации)
3в. Одна атака на Многоножку, Льва или Летучую мышь убьет его
3d. Атака другого бота без ножа нанесет 5 урона, а 10 ножом
Правила:
Придерживайтесь общих языков, которые могут быть запущены в OS X или Linux.
При желании вы можете записать в файл данные объемом до 1 КБ, но не более
Подсчет очков:
Боты будут только в пещере, пока не останется только один, или пока не пройдет 50 ходов, в зависимости от того, что наступит раньше. Ваш бот будет оцениваться по сумме количества золотых монет, которые он собрал, и сколько ходов он продержался.
Код контроллера можно загрузить здесь для тестирования (создайте папку с именем «боты» в том же каталоге, в который вы его загрузили, и поместите своего бота в «боты»). Вам потребуется NumPy для его запуска. Не стесняйтесь копаться в этом, но вам придется извинить беспорядок ...
Вот код для случайного бота:
#!/usr/bin/python
import random as r
a = ['M','A','H']
d = ['NN','NE','EE','SE','SS','SW','WW','NW']
print(a[r.randint(0,2)]+d[r.randint(0,7)]+a[r.randint(0,2)]+d[r.randint(0,7)])
**** Ваш бот всегда будет двигаться в общем направлении, указанном вашим выходом, но если ему препятствует камень или стена, точное направление зависит от обстоятельств. Например, если ваш бот против стены, вот так:
---
}--
Y--
---
---
и ваш вывод
MNWMSW
Ваш бот переместится на одну позицию вниз. Он не мог двигаться на север или запад, так что это движение не имело никакого эффекта. Он мог двигаться на юг (и сделал), но не мог двигаться на запад. Однако, если ваш бот попытается переместиться на северо-восток, он пойдет прямо в это пространство (диагональное движение - диагональное, а не процедурное)
Leaderboard
Это средние оценки 4 игр.
The bot of Survival: 54.75
Coward: 52.25
Pufferfish: 50.00
Randombot: 50.00
Indiana Jones: 47.50
TheoremBot: 46.50
источник
Ответы:
Индиана Джонс, Питон 2
Этот бот ничего не боится. Он попытается получить золото; и если он не может их найти, он попытается нанести удар противникам ножами.
источник
line.index('Y')
выдаст ошибку, если «Y» не в строке, ноline.find('Y')
вернет -1, если «Y» не в строке. В противном случае это здорово!MSNMSN
, что неверно.Трус, python3
Трус всегда убегает от потенциальных угроз.
Однако, если он чувствует себя суперсильным, он внезапно выйдет из себя и нанесет удар всему, что находится рядом с ним.
Проблема с текущей реализацией состоит в том, что команды перемещения выдаются без знания, является ли это первым или вторым перемещением.
источник
Бот выживания - Питон 2
Изменить: добавлено лучшее избегание ямы.
источник
Pufferfish, Python 3+
Я просто тот человек.
источник