É um verão seco na pradaria. Os quatro agricultores da região percebem que podem controlar o mercado de milho queimando as colheitas de seus vizinhos. Mas eles precisam de uma estratégia para fazê-lo; é aí que você entra.
Sua tarefa é escrever um bot para dizer aos agricultores o que queimar. O objetivo é terminar o jogo com a maior área de terra não queimada. O campo de jogo é uma grade 32x32. Cada célula pode ser uma das seguintes:
. - Ground
@ - A bot
# - Ash
W - Wet ground
1,2,3,4,5, or 6 - Fire
O fogo cresce em intensidade em 1 a cada turno. Quando tiver 3 anos ou mais, incendiará as células próximas a ela (horizontal ou verticalmente). Depois que o fogo atinge 6, ele se transforma em cinza.
Em cada turno, os bots recebem como STDIN o seguinte: bot inicial x, bot inicial y, posição atual do bot x, posição atual do bot y, e o tabuleiro, separados por novas linhas. Um exemplo:
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..........................
................................
................................
................................
................................
................................
................................
(neste caso, você é o bot no canto inferior esquerdo).
Você deve gerar três caracteres, com uma nova linha opcional, representando o seguinte:
Mover - um dos L, R, U, D, or S (stay)
Ação - um dos B (burn), P (pour water) or X (do nothing)
Direction - one of L, R, U, D or S
- controla em qual célula você executa a ação
O fogo não afeta os bots.
A ordem dos turnos é a seguinte: Todos os bots se movem; todos os bots realizam ações; então as regras ambientais acontecem. Se você derramar água no chão, ela ficará molhada ( W
) por uma volta. O fogo não se espalhará para o chão molhado. Se você derramar água no chão molhado, ele continuará molhado. Se você derramar água no fogo, ela volta ao solo normal. Você não pode fazer nada com cinzas.
As rodadas são executadas com 4 bots por vez. A rodada termina após 50 turnos, ou quando um bot fica fora do chão não queimado, o que ocorrer primeiro. Sua pontuação é calculada como o número de células do solo ou do solo úmido no quadrado 9x9, centralizado no local em que o bot foi iniciado.
Aqui está um exemplo de bot; ele pega as três letras aleatoriamente e geralmente acaba queimando seus próprios campos.
RandomBurner:
#!/usr/bin/env python
import random
print random.choice('LRUDS')+random.choice('BPX')+random.choice('LRUDS')
Regras:
- Nenhum acesso ao sistema de arquivos fora da sua própria pasta.
- Você pode gravar em arquivos se precisar armazenar dados persistentes entre turnos, mas apenas até 1kb por bot
- Você não pode substituir o bot de mais ninguém
- Se você emitir uma jogada inválida, seu bot ficará parado. Se você emitir uma ação inválida, seu bot não fará nada.
- Por favor, atenha-se a idiomas comuns que podem ser executados em uma caixa OSX ou Linux.
O código do controlador pode ser encontrado aqui.
Resultados iniciais:
Average of 15 rounds:
---------------------
81 Farmer
56 CautiousBot
42 GetOff
41 Visigoth
40 DontBurnMeBro
37 FireFighter
35 Pyro
11 Protector
Atualização : Adicionado Farmer, CautiousBot, GetOff, FireFighter e Pyro.