Resultados finais disponíveis
Introdução
Depois do meu KOTH anterior, com temas pesados ( guerra de fantasia , pandemia mundial ...), estou de volta com um novo jogo leve. Desta vez, você está enfrentando uma situação de "jogo de tabuleiro". Uma pilha de moedas de cabeça para baixo é colocada no centro de uma mesa muito grande e você está determinado a receber sua parte do saque!
Glossário
Moedas : tokens que podem ser invertidos ou invertidos.
Unflipped : Moedas colocadas na mesa com o valor apontando para baixo. Este é o estado padrão das moedas.
Lançado : Moedas colocadas na mesa com o valor apontando para cima.
Local : refere-se à sua pilha de moedas.
Global : refere-se à pilha de moedas no centro.
Princípio
No início do jogo, cada jogador começa com 0 pontos e 0 moedas (lançadas ou não). O jogo é baseado em turnos. Durante o turno, os jogadores podem realizar até 3 ações interagindo com a pilha de moedas no centro da mesa, sua própria pilha de moedas ou com outros jogadores.
A ordem do jogo é definida aleatoriamente no início do jogo. A ordem dos jogadores na lista de argumentos representa a ordem do turno e vai da esquerda para a direita nessa lista. "Próximo" e "Anterior" referem-se, respectivamente, a "à direita nessa lista" e "à esquerda nessa lista" com um loop, se você for o último dos dois lados.
O jogo dura 50 rodadas ou até que haja 0 moedas no centro no final do turno do jogador (o que significa que você terminará suas 3 ações, mesmo que a pilha esteja vazia após a sua primeira ação, e você poderá colocar de volta moedas para deixar o jogo continua). O número inicial de moedas globais é definido aleatoriamente com esta fórmula:
(2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))`
Cada ação lhe dará pontos (ou fará com que você perca alguns) e, no final do jogo, cada moeda que você tiver será adicionada aos seus pontos ( -1 para não jogado, +2 para jogado ). O jogador com mais pontos ganha.
O controlador fornece entrada por meio de argumentos de comando, e seu programa deve gerar via stdout.
Sintaxe
Entrada
Cada vez que seu programa é chamado, ele recebe argumentos neste formato:
Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;...
As rodadas são indexadas em 1.
Exemplo de entrada
6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0
Aqui, você vê que é a 6ª rodada e você é o jogador 2. Há 52 moedas na pilha central. Você tem 12 pontos, 1 moeda lançada e 0 moeda não lançada. Os pontos podem ser negativos.
Saída
Você precisa produzir três caracteres (sem espaço, sem separador), cada um correspondendo a uma ação que você executará neste turno. A ordem dos caracteres determina a ordem das ações. Você pode emitir as mesmas ações várias vezes. Caso não haja moedas suficientes para concluir sua ação, ele usará o máximo de moedas disponíveis e contará pontos apenas para as moedas usadas.
N: Não faça nada
1: Pegue 1 moeda da pilha central [Efeitos: +1 desbloqueado local / -1 ponto / -1 desbloqueado global]
2 : Pegue 2 moedas da pilha central [Efeitos: +2 desbloqueado local / -2 pontos / -2 desbloqueado global]
3 : pegue 3 moedas da pilha central [Efeitos: +3 desbloqueado local / -3 pontos / -3 desbloqueado global]
A : coloque 1 moeda da sua pilha [Efeitos: -1 desbloqueado local / +1 ponto / +1 global unflipped]
B : Coloque de volta 2 moedas da sua pilha [Efeitos: -2 locais não lançados / +2 pontos / +2 global unflipped]
C : Coloque de volta 3 moedas da sua pilha [Efeitos: -3 locais não lançados / +3 pontos / +3 global unflipped]
X : remova 1 moeda da sua pilha[Efeitos: -1 local não jogado / 0 ponto]
Y : Remova 2 moedas da sua pilha [Efeitos: -2 local não jogado / 0 ponto]
Z : Remova 3 moedas da sua pilha [Efeitos: -3 local não jogado / 0 ponto]
R : Gire moedas ao jogador anterior [Efeitos: -1 ponto por flipper recebido, +2 pontos por flipped recebido / aplica-se a todos os jogadores]
T : Gire moedas para o próximo jogador [Efeitos: -1 ponto por flipper recebido, +2 pontos por flipped recebido / aplica-se a todos os jogadores]
F : Jogue 1 moeda [Efeitos: -1 local invertido / +1 local invertido / +2 pontos]
U : Solte 1 moeda [Efeitos: +1 local não invertido / -1 local invertido / -2 pontos]
Saída de exemplo
2FF : Pega duas moedas e vira duas moedas, marcando -2 + 2 + 2 = 2 points
Se sua saída estiver incorreta, o controlador assumirá NNN.
Controlador
Você pode encontrar o controlador no GitHub . Ele também contém dois samplebots, escritos em Java. Para executá-lo, confira o projeto e abra-o no seu IDE Java. O ponto de entrada no mainmétodo da classe Game. É necessário o Java 8.
Para adicionar bots, primeiro você precisa da versão compilada para Java (arquivos .class) ou das fontes das linguagens interpretadas. Coloque-os na pasta raiz do projeto. Em seguida, crie uma nova classe Java no playerspacote (você pode dar um exemplo nos bots já existentes). Esta classe deve ser implementada Playerpara substituir o método String getCmd(). A String retornada é o comando do shell para executar seus bots. Você pode, por exemplo, fazer um trabalho de bot rubi com este comando: return "C:\Ruby\bin\ruby.exe MyBot.rb";. Por fim, adicione o bot na matriz de jogadores na parte superior da Gameclasse.
Regras
- Os bots não devem ser escritos para vencer ou suportar outros bots específicos.
- A gravação em arquivos é permitida. Por favor, escreva para "YOURSubmissionname.txt", a pasta será esvaziada antes do início do jogo. Outros recursos externos não são permitidos.
- Seu envio tem 1 segundo para responder.
- Forneça comandos para compilar e executar seus envios.
Idiomas suportados
Vou tentar dar suporte a todos os idiomas, mas ele precisa estar disponível online gratuitamente. Por favor, forneça instruções de instalação se você não estiver usando um idioma "mainstream".
A partir de agora, eu posso executar: Java 6-7-8, PHP, Ruby, Perl, Python 2-3, Lua, R, node.js, Haskell, Kotlin, C ++ 11.
Resultados finais
Estes são os resultados de 100 jogos (soma de pontos):
1. BirdInTheHand: 1017790
2. Balance: 851428
3. SecondBest: 802316
4. Crook: 739080
5. Jim: 723440
6. Flipper: 613290
7. Wheeler: 585516
8. Oracle: 574916
9. SimpleBot: 543665
10. TraderBot: 538160
11. EgoisticalBot: 529567
12. RememberMe: 497513
13. PassiveBot: 494441
14. TheJanitor: 474069
15. GreedyRotation: 447057
16. Devil: 79212
17. Saboteur: 62240
Os resultados individuais dos jogos estão disponíveis aqui: http://pasted.co/63f1e924 (com moedas iniciais e número de rodadas por jogo).
Uma recompensa de 50 reputações é concedida ao vencedor: Bird In The Hand, de Martin Büttner .
Obrigado a todos por sua participação, até a próxima KOTH ~