Todo jogador tem um número. O seu pode ser o mais distante deles?
Exigências
Escreva uma função Java, Python 2 ou Ruby nomeada choose()
que aceite três argumentos:
- um inteiro - o número de rodadas já concluídas
- um número inteiro - o número de jogadores
- uma matriz de strings - os resultados de cada rodada anterior
- cada sequência é uma lista de números inteiros separados por espaço, classificados do menor para o maior
Por exemplo, choose(2, 4, ["4 93 93 174", "1 84 234 555"])
significa:
- já havia duas rodadas (esta é a terceira rodada)
- há um total de quatro jogadores
- na primeira rodada, os números escolhidos foram 4, 93, 93, 174
- na segunda rodada, os números escolhidos foram 1, 84, 234, 555
Você deve retornar um número inteiro de 1 a 999 (inclusive).
Para cada outro jogador, sua pontuação é a raiz quadrada da distância entre seu número e o deles. Sua pontuação para a rodada é o total de todas essas pontuações.
100 rodadas serão jogadas. A pontuação total mais alta vence!
Regras
- Seu código não pode usar nenhuma E / S, incluindo console, arquivos, rede, etc.
- Você não pode interferir com o programa de controle ou com outros jogadores.
- Programas que parecem violar as regras acima serão excluídos.
- Cada chamada de uma função deve levar menos de cinco segundos no meu computador (Intel Core i5 2450M com 8 GB de RAM).
- Se um programa lançar uma exceção ou retornar um valor inválido, será tratado como se retornasse 1.
- Cada usuário pode enviar no máximo um programa.
Diversos
- O programa de controle está no GitHub .
- Existem três players embutidos. Eles podem ser encontrados nesta resposta .
- O vencedor será escolhido no dia 28 de janeiro.
Entre os melhores
O vencedor é Conservator .
Menção honrosa a Gustav , o jogador com maior pontuação com uma estratégia não constante.
- Conservator - 36226
- Alto - 36115
- FloorHugger - 35880
- NumberOne - 35791
- Superestimador - 35791
- Gustav - 35484
- Historiador - 35201
- Amostrador - 34960
- Incrementador - 34351
- JumpRightIn - 34074
- Vickrey - 34020
- Adolescente - 33907
- Randu - 33891
- Halterofilista - 33682
- Middleman - 33647
- BounceInwards - 33529
- NastyMathematician - 33292
- Jumper - 33244
- Copiador - 33049
Os resultados completos podem ser encontrados aqui . (Eu recomendo desativar a quebra de texto.)
king-of-the-hill
Ypnypn
fonte
fonte
Respostas:
Python, Conservator
Como toda exceção gera 1, ela fica afastada o máximo possível. Faz fortuna às custas dos fracos.
Curiosidade: pensei em melhorá-lo, mas não consegui encontrar uma maneira melhor do que apenas me esconder em um canto.
fonte
Número Um, Java
O nome explica este completamente.
fonte
Python, AntigoHistória
Acredita firmemente que o futuro será exatamente como o passado, mas acredita que a última rodada é muito recente para ser histórica, por isso apenas passa de 1 a 999 e escolhe o que teria sido o melhor das rodadas anteriores, com exceção da última. O primeiro turno 2 retorna 500.
fonte
Vickrey Python
Faz uma lista dos números que foram reproduzidos com frequência, assume que todos os demais reproduzem da melhor maneira e opta pelo segunda melhor opção, dada a lista.
Por exemplo, se os números mais comuns são
[1, 990, 999]
, então Vickrey insere o jogo ideal 200 a[1, 200, 990, 999]
ser fornecido e escolhe a melhor opção para o novo array (que é 556).fonte
Java, superestimador
Como o nome sugere, este programa assume que todos os outros programas tentarão "jogar bem" escolhendo a melhor resposta com base na última rodada - portanto, esse "superestimador" sempre escolhe a pior posição possível com base na rodada anterior.
fonte
Java - Halterofilista
Repete de 1 a 999 para descobrir qual seria o melhor para cada rodada. Pesa-os de acordo com o tempo recente (as rodadas recentes têm mais peso) e retorna sua melhor estimativa geral. Esperemos que, se os padrões se formarem na rodada seguinte, isso será possível.
Edit: Agora com + Inf% mais recursão! Não conseguir armazenar / salvar / ver o que você escolheu nas rodadas anteriores é uma chatice. Levar em consideração suas próprias entradas atrapalha você quando tenta descobrir o que os outros farão. Então, vamos calcular! Agora será necessário descobrir o que ele escolheu na rodada anterior e ignorar isso ao calcular o próximo movimento.
Observe que ele realmente apenas ignora suas próprias informações desde o último turno, mas como essa é a mais alta, parece funcionar bem. Isso pode ser corrigido com um pouco mais de trabalho, mas vou aguardar o placar de líderes para ver se é necessário.
fonte
Ruby, Copycat
Simplesmente retorna o número ganho na última vez.
fonte
Ruby, JumpRightIn
É provavelmente a estratégia mais direta. Ele encontra a maior lacuna na última rodada e escolhe o número bem no meio dessa lacuna.
fonte
Gustav (Python 2)
Esta é uma meta-estratégia bastante direta, copiada descaradamente de uma das minhas respostas antigas em um desafio semelhante ao KotH. Ele considera algumas estratégias simples, analisa como elas teriam se saído em todas as rodadas anteriores e depois segue a de maior pontuação na próxima rodada.
Percebo agora que o algoritmo ainda tem algumas falhas. Por exemplo, pode continuar "perseguindo a si próprio" porque não distingue seus próprios movimentos dos dos oponentes. No entanto, vou deixar assim por enquanto.
fonte
Python, Randu
Números selecionados pelo gerador de números aleatórios mais mal concebido de todos os tempos .
fonte
Os três programas a seguir estão embutidos.
Alto (Ruby)
Incrementador (Java)
FloorHugger (Python)
fonte
Python, Sampler
Fora de uma lista de lugares, escolha o que está mais distante dos números usados recentemente, ignorando a curva anterior.
fonte
Java, BounceInwards
Começando em 1, ele gradualmente se aproxima de 500 enquanto alterna entre a opção superior e a inferior.
fonte
NastyMathematician (Java)
Examina as duas últimas rodadas (se os melhores números forem 70 e 80, produzirá 90). É desagradável porque tenta levar o maior número possível de vitórias contra seus oponentes.
fonte
Python - não quero pensar em um nome ...
Se a média dos números escolhidos nas rodadas anteriores for inferior a 500, ele escolhe 999. Ele escolhe 1 caso contrário.
fonte
Python, Middleman (baseado no conservador de @clabacchio)
Depois que notei que a borda superior tem uma pontuação alta (e superou a borda inferior), perguntei-me se poderia haver algo pior do que ficar preso no meio.
fonte
Jumper (Ruby)
Alterna entre inferior, médio e superior. (5.500.995)
fonte