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 main
mé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 players
pacote (você pode dar um exemplo nos bots já existentes). Esta classe deve ser implementada Player
para 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 Game
classe.
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 ~