Seu amigo geólogo quase chutou a porta do escritório quando ele entrou, os olhos arregalados de emoção e pediu que você fosse com ele a um site que ele acabara de descobrir. No caminho, ele explica que acha que literalmente atingiu ouro. O único problema é que ele está enterrado no subsolo de uma caverna com um teto muito instável. É muito perigoso jogar spelunking, então ele quer que você programe um de seus robôs exploradores de cavernas para coletar o máximo de ouro possível antes que ele o puxe de volta. Ele também menciona que ele sondou a caverna e encontrou alguns animais selvagens que poderiam ser prejudiciais para os robôs, e também que ele deixou cair algum equipamento lá embaixo que ainda pode ser usado. Cada robô está equipado com dois braços e uma variedade de sensores. Quando você chega ao local, ele diz que planeja recrutar mais codificadores,
Agora, até o âmago da questão. Os sensores transmitem informações ao seu programa como caracteres ASCII. Aqui está uma lista do que cada personagem significa e descrições para qualquer coisa que o bot possa encontrar na caverna:
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
O tamanho da caverna cresce com base em quantos bots estão participando. Começa como 30x30 e recebe um 10x10 extra para cada bot. Então, dois bots exploram uma caverna de 50x50.
Os robôs começam com 20 pontos de vida, mas não têm um limite máximo de pontos de vida.
Entrada:
Você receberá informações através do STDIN no seguinte formato:
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-
A primeira linha contém informações sobre o seu bot e o restante é a grade que ele pode ver. Se o seu bot estiver contra uma das 4 paredes da caverna, você receberá uma grade mais parecida com esta (no caso de estar a oeste):
---
}--
Y--
---
---
A caverna não se enrola e sua visão também. As paredes da caverna não estão marcadas, a única indicação que seu bot recebe de que está se aproximando de uma parede é sua visão diminuída. Com o Revealer, você pode obter algo assim:
--------C--
LW--------B
---K-N-----
--------BR-
-F---------
--B--Y---@N
-W@---F----
------K-F--
----@-}----
R@---G}--}-
--------G-R
Resultado:
Você recebe dois movimentos por turno, que você produz no seguinte formato:
MNNANW <- Moves are groups of 3 characters representing the action and the direction
As ações possíveis são as seguintes:
M Move - Move your bot in the specified direction
A Attack - Attack the square in the specified direction
H Hold - Do nothing
As direções possíveis são as seguintes:
NN - North (up)
NE - Northeast (up-right)
EE - East (right)
SE - Southeast (down-right)
SS - South
SW - Southwest
WW - West
NW - Northwest
Os movimentos são aplicados da esquerda para a direita.
Voltas:
Transforma o progresso da seguinte maneira:
Efeitos de veneno são aplicados a qualquer jogador que tenha sido envenenado
Os não-robôs se movem e atacam
2a Leões, centopéias e morcegos se movem aleatoriamente
2b. Leões e centopéias atacarão tudo o que estiver diretamente adjacente a ele (inclusive na diagonal)
2c. O efeito bastão será aplicado apenas a um bot se estiver no mesmo espaço que o bastão
2d. A enfermeira Nina ficará em um local por 3 turnos e depois pulará para um local aleatório.
Bots mover
3a. Se o seu bot fornecer uma saída inválida, ele não se moverá
3b Seu bot tentará chegar o mais próximo possível do espaço designado pela saída (veja a nota na parte inferior para mais detalhes)
3c. Um ataque a uma centopéia, leão ou morcego o matará
3d. Atacar outro bot sem faca causa 5 de dano e 10 com uma faca
Regras:
Atenha-se a idiomas comuns que podem ser executados no OS X ou Linux.
Opcionalmente, você pode gravar até e não exceder dados de 1kb em um arquivo
Pontuação:
Os bots só estarão na caverna até restar apenas um ou até 50 turnos, o que ocorrer primeiro. Seu bot será julgado pela soma do número de moedas de ouro coletadas e quantas voltas durou.
O código do controlador pode ser baixado para teste aqui (crie uma pasta chamada "bots" no mesmo diretório em que o baixou e coloque seu bot dentro de "bots"). Você precisará do NumPy para executá-lo. Sinta-se livre para cavar, mas você terá que desculpar a bagunça ...
Aqui está um código para um bot aleatório:
#!/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)])
**** Seu bot sempre se moverá na direção geral especificada por sua saída, mas se estiver obstruído por uma rocha ou uma parede, a direção exata dependerá da circunstância. Por exemplo, se seu bot estiver contra uma parede como esta:
---
}--
Y--
---
---
e sua saída é
MNWMSW
seu bot moverá um espaço para baixo. Não podia se mover para o norte ou oeste, portanto essa mudança não teve efeito. Poderia se mover para o sul (e mudou), mas não para o oeste. No entanto, se o seu bot tentasse se mover para o nordeste, ele iria diretamente para esse espaço (o movimento diagonal é diagonal, não processual)
Entre os melhores
Estas são as pontuações médias de 4 jogos.
The bot of Survival: 54.75
Coward: 52.25
Pufferfish: 50.00
Randombot: 50.00
Indiana Jones: 47.50
TheoremBot: 46.50
fonte
Respostas:
Indiana Jones, Python 2
Este bot não tem medo de nada. Ele tentará obter o ouro; e, se não encontrar, tentará esfaquear os oponentes com facas.
fonte
line.index('Y')
lançará um erro se "Y" não estiver na linha, masline.find('Y')
retornará -1 se "Y" não estiver na linha. Caso contrário, é ótimo!MSNMSN
, você produz bot cane , o que é inválido.Covarde, python3
Um covarde sempre foge de ameaças em potencial.
No entanto, se ele se sente super forte, de repente ele fica louco e apunhala tudo perto dele.
O problema com a implementação atual é que os comandos de movimentação são emitidos sem o conhecimento se é a primeira ou a segunda movimentação.
fonte
O bot da sobrevivência - Python 2
Edit: adicionado melhor evitar pit.
fonte
Baiacu, Python 3+
Eu sou apenas essa pessoa.
fonte