Isso foi inspirado em um minijogo de Minecraft. As regras são bem simples: você corre e pula, e todos os blocos em que você pisa desaparecem quando você pisa nele. O objetivo é ser o último que resta.
Seu bot deve ser um programa completo. Ele deve aceitar entrada como um argumento de linha de comando. A entrada será um mapa do "mundo"; aqui está um exemplo:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxx xxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx x xxxxxxxxxxxxx@xxxxxxxxxxx
xxxxxx1xxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx
xxxxxxxxxxxxxxxxx x x xxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx
xxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxx xxx xx3xxxxxxxxxx
xxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx x
xxxxxxxxxxxxxxxxxxxxxxxxxxx xx
xxxxxxxxxxxxxxxxxxxxxxxxx 2
xxxxxxxxxxxxxxxxxxxxxxx
A legenda é a seguinte:
x: solid block
: empty air
@: your bot
1,2,3,4,5,6,7,8,9,0: other bots
Seu bot deve exibir sua jogada como um par de números inteiros. Exemplo: -1, 2
moverá 1 bloco para a esquerda e 2 blocos para baixo (a origem das coordenadas está no canto superior esquerdo).
Você pode mover até quatro quarteirões, distância de Manhattan, da sua localização atual. Se você tentar avançar além disso, a movimentação é inválida. Qualquer movimento que o mova além da borda o colocará na borda. Movimentos inválidos serão ignorados.
Depois de pousar em um bloco, ele é removido; se você permanecer no mesmo bloco no próximo turno, cairá. Dois bots podem pousar no mesmo bloco no mesmo turno e os dois sobrevivem; se isso acontecer, os dois bots verão apenas a si mesmos e não o outro bot.
Se você precisar armazenar arquivos para persistência, faça-o em uma pasta com o nome do seu bot. Você não pode ler os dados persistentes de outros bots, se houver algum.
O controlador de partida está disponível em https://paste.ee/p/Xf65d .
Por favor, use idiomas que podem ser executados em uma instalação padrão do Linux ou OSX.
Resultados atuais (100 rodadas):
JumpBot 31
LookBot 27
ShyBot 26
Slow Bot 15
KnightBot 2
Moat Builder 0
UpBot 0
Random Bot 0
fonte
Respostas:
Bot lento (Python)
Ele se move em um padrão de linha e checa seus movimentos antes de fazê-los (também se suicida quando ele é o último vivo a evitar longos tempos de execução). Ele ganhou 195/200 Battels no meu torneio de teste.
Eu não sou especialista em python e provavelmente há 100 maneiras de fazê-lo mais curto / melhor
fonte
JumpBot (C)
Tente pular para o campo com o maior número possível de jogadas na próxima rodada.
fonte
LookBot (C)
Bot simples com desempenho semelhante ao Slow Bot, exceto que este faz movimentos possíveis aleatórios. Planeje melhorar isso para o PredictBot.
fonte
Moat Builder (Python)
Se eu cavar um fosso em volta de mim, ninguém do lado de fora pode me ferrar.
... também conhecido como "Pinte-se em um simulador de canto 2016".
fonte
Monte (Python)
Desculpe, esse trocadilho só teve que ser feito.
De qualquer forma, esse bot funciona executando uma Pesquisa de árvore de Monte Carlo em todos os conjuntos de movimentos possíveis. Pense no JumpBot, apenas com mais profundidade.
Para executar, ele precisa de um argumento de linha de comando extra (pode ser especificado no controlador). Controla quanto tempo o bot deve procurar (em ms); Eu usei 750-1500 em testes.
Código:
Ensaios
25 rodadas:
100 rodadas:
200 rodadas:
Todas as simulações acima usavam o tempo de pesquisa 750. Esse bot provavelmente seria ainda melhor com um tempo de pesquisa mais longo (não sei qual é o máximo permitido).
Melhorias
Este bot ainda precisa de melhorias em:
fonte
ShyBot (Python)
Este bot realmente não gosta de outros bots e tentará se manter afastado, se possível. O ShyBot também é muito cuidadoso sobre onde pisar; nem pisará em outros bots. No entanto, o ShyBot ainda perde com frequência, o que torna inseguro.
fonte
KnightBot (Java)
Funciona como xadrez e é nomeado como Twitch ...
...
.........
............................Desculpe...
SwirlyBot (Java)
Claramente, essas não são as soluções ideais, mas espero que sejam úteis para testes de nível intermediário.
fonte
Bot aleatório, UpBot
Dois bots iniciais para competir:
Bot aleatório: um exemplo de bot que se move aleatoriamente.
UpBot: um exemplo de bot que se move para cima.
fonte
StalkerBot (Python)
Chegará o mais próximo possível do bot mais próximo que ele vir. Meta o suicídio automático (sem sentido) do Slow Bot. (Se eu estiver na mesma praça e não houver outros jogadores, ele não me verá e se suicidará.)
fonte