NOTA: No momento, esse desafio está encerrado, pois não consigo instalar os idiomas necessários para executar uma correspondência. Se alguém tiver tempo e interesse para fazê-lo, não sou contra.
Veja a parte inferior da postagem para uma tabela de classificação.
Este é um desafio semi-cooperativo do tipo rei da colina, onde os bots constroem caminhos através de um gráfico de grade bidimensional. O bot que controla os nós com mais tráfego é o vencedor. No entanto, são necessários mais recursos de um bot para criar um caminho de conexão, de modo que os bots terão que trabalhar juntos - até certo ponto.
Jogabilidade
A seguir, N > 0
seja o número de bots em jogo.
The Grid
O jogo é jogado em uma grade inteira bidimensional de tamanho , cuja coordenada inferior esquerda está em . Cada coordenada com tem bordas de saída para as três coordenadas , e, por cima, onde os -coordena são tomadas módulo . Isso significa que a grade envolve as bordas leste e oeste. Todas as coordenadas inferiores são uma fonte e todas as coordenadas superiores são um coletor .⌊4/3N2⌋ × ⌊4/3N2⌋
(0,0)
(x,y)
0 ≤ y < ⌊4/3N2⌋-1
(x-1,y+1)
(x,y+1)
(x+1,y+1)
x
⌊4/3N2⌋
(x,0)
(x,⌊4/3N2⌋-1)
A figura a seguir mostra uma 8 × 8
grade.
Cada vértice do gráfico está inativo , ativo ou quebrado . Todos os vértices começam inativos e podem ser ativados por bots, que serão seus proprietários. Além disso, os bots podem quebrar os vértices e não podem ser reparados.
Ordem de volta
Um turno consiste em uma fase de destruição e uma fase de ativação . Na fase de destruição, cada bot pode quebrar um vértice inativo. Esse vértice é quebrado a partir de então e não pode ser ativado por ninguém. Na fase de ativação, cada bot pode ativar um vértice inativo. A partir de então, eles possuem esse vértice, e ele não pode ser reativado por mais ninguém. Vários bots podem possuir um único vértice, se todos o ativarem no mesmo turno. Em cada fase, as seleções de vértices são feitas simultaneamente.
Pontuação
Uma rodada dura exatamente para as voltas. Depois disso, a rodada é pontuada da seguinte forma. A partir de cada vértice de origem ativa, realizamos uma pesquisa aleatória de profundidade ao longo dos vértices ativos (o que significa que os filhos de cada vértice são visitados em uma ordem aleatória). Se um caminho for encontrado da fonte para algum coletor, para todos os vértices ao longo desse caminho, todo proprietário do vértice receberá um ponto.N2
N
O jogo inteiro dura 100 rodadas, e o bot com mais pontos no total é o vencedor. Eu posso aumentar esse número, se a variação das pontuações for muito alta.
Regras adicionais
- Sem mexer com o controlador ou outros envios.
- No máximo uma inscrição por participante.
- Nenhum recurso externo, exceto um arquivo de texto privado, foi limpo no início do jogo.
- Não projete seu bot para vencer ou apoiar oponentes específicos.
- Forneça comandos para compilar e executar seu bot. Qualquer compilador / intérprete disponível gratuitamente para o Debian Linux é aceitável.
O controlador
O controlador é escrito em Python 3 e pode ser encontrado no GitHub . Consulte o arquivo LEIA-ME para obter instruções detalhadas. Aqui está uma API para você começar:
- Os robôs são iniciados no início de cada rodada e persistem até o final da rodada. A comunicação com o controlador via STDIN e STDOUT, usando mensagens terminadas em nova linha.
BEGIN [num-of-bots] [num-of-turns] [side-length]
é inserido no início.DESTROY [turn]
é inserido no início de cada fase de destruição. Seu bot deve responder comVERTEX x,y
a escolha de um vértice, ouNONE
.BROKEN [turn] [your-choice] [other-choices]
é inserido no final de cada fase de destruição. A ordem dos outros bots é aleatória no início de cada jogo, mas permanece fixa durante o mesmo. As opções são apresentadas comox,y
ouN
.ACTIVATE [turn]
eOWNED [turn] [your-choice] [other-choices]
são os equivalentes dos itens acima para a fase de ativação e têm a mesma semântica.SCORE [your-score] [other-scores]
é inserido no final do jogo.- Seu bot tem 1 segundo para analisar os resultados de uma fase e escolher o próximo vértice e 1 segundo para sair após receber a pontuação. Vou testar os envios no meu laptop relativamente antigo, por isso é melhor deixar alguma margem aqui.
Lembre-se de liberar seu buffer de saída. Não fazer isso pode travar o controlador em alguns ambientes.
Entre os melhores
Atualizado 13/3/2015
O Peacemaker está em funcionamento e o Funnelweb também recebeu uma atualização. As pontuações aumentaram em uma ordem de magnitude. O conector excedeu o limite de tempo em dois jogos.
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
O log completo com gráficos artísticos ASCII pode ser encontrado no repositório do controlador, em graphical_log.txt
.
Algumas observações:
- O conector pode ser facilmente interrompido quebrando um único vértice na frente dele. Suspeito que o Aborrecimento frequentemente faça isso. No entanto, atualmente faz pouco sentido, porque apenas o Connector pode criar um caminho.
- A melancia pode obter uma pontuação decente simplesmente por estar em um caminho de conexão (já que é muito provável que o DFS use seus vértices).
- O Explorer gosta de cultivar videiras das melancias.
- A Funnelweb atualizada obtém pontuações muito boas, pois o Connector geralmente se prende a ela na metade inferior da grade.
- Os jogos estão ficando muito longos, a rodada média leva cerca de 25 segundos na minha máquina.
4/3*N^2
e, mesmo lá, os bots tiveram problemas para formar caminhos válidos. No entanto, o Connector foi temporariamente desqualificado devido a um erro e agora que foi corrigido, espero que os jogos sejam mais interessantes. Vou correr outro lote hoje à noite.