É 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.
fonte
Respostas:
Visigodo
Visigodo tenta queimar seus inimigos no chão. Ele espera fazer isso antes que mais alguém chegue à sua terra.
Corre:
python visigoth.py
Esta é a minha primeira entrada, críticas construtivas são apreciadas!
fonte
min
onde deveria termax
. Eu consertei isso.Java, Protetor
Tenta cercar seu campo com uma cerca de cinzas.
Edit: Lógica aprimorada um pouco. Provavelmente não fará diferença.
Coloque em um arquivo chamado
Protector.java
.Compilar com:
javac Protector.java
Executar com:
java Protector
fonte
GetOff, Python
GetOff só quer manter sua terra para si, e ele não tem medo de perseguir aqueles malditos bots por toda a terra, esguichando-os com sua pistola de água até que eles saiam. Enquanto sua propriedade não está sendo violada, ele faz o possível para garantir que sua terra não seja queimada.
fonte
a < b < c
sintaxe funciona em Python? Eu pensei que avalia para(a < b) < c
, que é1 < c
ou0 < c
. Corrija-me se eu estiver errado. (Encontrado em primeiro condicional de circuito bot.)1<3>2
avaliaTrue
na minha máquina (se os agrupasse, retornaria falso:1>2
e1<1
são as possibilidades).Agricultor, Java
O fazendeiro só se preocupa com suas colheitas. Ele constantemente observa seu campo em busca de possíveis incêndios ou invasores.
fonte
isFire
você poderia usarCharacter.isDigit
.Pyro, python
Pyro gosta de fogo. Pyro adora fogo. Pyro vive em chamas. Estou pensando "Pyro from TF2". Pyro gosta de queimar coisas. Ele não queimará seu próprio território, mas tentará sair dele, usando um simples algoritmo de "busca de caminhos".
fonte
DontBurnMeBro
Outra entrada do Python. Garantido para não ser o primeiro a morrer (eu acho).
fonte
P
não éW
.Bombeiro, Java
Combate a todos os incêndios.
fonte
Depositário, Python 2
Pode ser simplificado, mas estou cansado.
O Guardião tenta evitar danos ao seu campo. Se um incêndio aparecer, ele se aproxima dele e o apaga o mais rápido possível.
Também posso adicionar acomodações para incêndios.
fonte
ValueError: min() arg is an empty sequence
- gera erros se nada estiver pegando fogo ainda.CautiousBot, Node.js (ES5)
Este bot sai e tenta atear fogo na terra de outros bots. Até fica em cima do fogo por 3 carrapatos para escondê-lo! No entanto, nunca se pode ser muito cauteloso, por isso sempre garante que esteja perto o suficiente para apagar qualquer incêndio em sua própria terra.
Notas:
state.json
armazenado em seu diretório de trabalho, usado para armazenar informações sobre as posições iniciais de outros bots e determinar por quanto tempo ocultar um incêndio iniciado. Isso deve ser excluído assim que a rodada terminar (por exemplo, quando algum bot vencer). Caso contrário, o bot ficará confuso na próxima rodada. (Deixe-me saber se isso viola as regras.)split
módulo.fonte
Error: Cannot find module 'split'
. Estou usando o Node.js v0.10.30.cd botdir
npm install split
por algum nó razão não gosta instalada globalmente para mim, mas você pode tentar isso também