Resultados - 19 de julho de 2014
O atual King of the Hill é Mercenary pelo usuário Fabigler ! Continue enviando entradas e derrubá-lo de seu trono!
Clique aqui para visualizar o placar.
Os programas enviados até 19 de julho de 2014 foram incluídos. Todos os outros envios serão incluídos em ensaios futuros. Novos resultados devem ser publicados por volta de 9 de agosto, para que você tenha bastante tempo.
Ilustrado por Chris Rainbolt, meu irmão e recém-formado pela Savannah College of Art and Design
Introdução
Os anjos e demônios estão lutando e, como sempre, usando a terra como campo de batalha. Os seres humanos estão presos no meio e estão sendo forçados a tomar partido. Uma força neutra desconhecida recompensa aqueles que sempre lutam pelo lado perdedor.
O jogo
Em cada avaliação, você será emparelhado pseudo-aleatoriamente e depois embaralhado com 20 a 30 outras submissões. Cada julgamento será composto de 1000 rodadas. A cada rodada, você recebe uma entrada e espera-se que produza uma saída. Sua saída será gravada e pontuada. Este processo será repetido 1000 vezes.
Entrada
Você receberá um único argumento que representa os votos anteriores de cada jogador. As rodadas são delimitadas por vírgula. A 0
representa um jogador que ficou do lado do mal naquela rodada. A 1
representa um jogador que ficou do lado de Bom. Dentro de um teste, os jogadores sempre estarão na mesma ordem. Seu próprio voto será incluído, mas não explicitamente identificado. Por exemplo:
101.100.100
Neste exemplo, três rodadas foram concluídas e três jogadores estão competindo. Jogador um sempre do lado de Bom. Jogador dois sempre do lado do mal. O jogador três trocou de Bom na rodada 1 para Mal nas rodadas 2 e 3. Um desses jogadores era você.
Resultado
Submissões Java
- Retorne a string
good
se desejar ficar do lado de Good. - Retorne a corda
evil
se quiser ficar do lado do mal.
Envios não Java
- Faça a saída da string
good
para stdout, se desejar ficar do lado de Bom. - Faça a saída da string
evil
para stdout se você quiser ficar do lado do mal.
Se o seu programa gerar ou retornar qualquer outra coisa, lançar uma exceção, não compilar ou demorar mais de um segundo para produzir qualquer coisa nessa máquina exata , será desqualificado.
Pontuação
As pontuações serão postadas em uma planilha do Google Docs para facilitar a visualização assim que eu puder compilar todas as entradas atuais. Não se preocupe - eu continuarei executando testes enquanto vocês continuarem enviando programas!
- Você recebe 3 pontos por tomar partido com a maioria durante uma rodada.
- Você recebe n - 1 pontos por tomar partido da minoria durante uma rodada, em que n é o número de vezes consecutivas em que ficou do lado da minoria.
Sua pontuação será a mediana de 5 tentativas. Cada julgamento consiste em 1000 rodadas.
Entregas
Envios não Java
Você deve enviar um título exclusivo, um programa e uma linha de comando do Windows que executará seu programa. Lembre-se de que um argumento pode ser anexado a essa sequência. Por exemplo:
python Angel.py
- Observe que este não possui argumentos. Esta é a primeira rodada! Esteja preparado para isso.
python Angel.py 11011,00101,11101,11111,00001,11001,11001
Submissões Java
Você deve enviar um título exclusivo e uma classe Java que estenda a classe Human abstrata, escrita abaixo.
public abstract class Human {
public abstract String takeSides(String history) throws Exception;
}
Testando
Se você quiser testar seu próprio envio, siga as instruções aqui .
Notas Adicionais
Você pode enviar quantas submissões quiser. Os envios que parecem estar em conluio serão desqualificados. O autor deste desafio será o único juiz nesse assunto.
Uma nova instância do seu programa ou classe Java será criada toda vez que for solicitada. Você pode persistir nas informações gravando em um arquivo. Você não pode modificar a estrutura ou o comportamento de qualquer coisa, exceto da sua própria classe.
Os jogadores serão embaralhados antes do início do teste. Demon e Angel vão participar de todas as tentativas. Se o número de jogadores for par, Petyr Baelish também participará. Demônios lutam pelo mal, Angel for Good e Petyr Baelish escolhe um lado pseudo-aleatório.
fonte
Respostas:
O mercenário
Sempre fique do lado de quem pagou mais dinheiro na última rodada.
Levando em conta que pessoas boas ganham estatisticamente mais.
fonte
Hipster, Rubi
Simplesmente combina com a minoria da última rodada, apenas porque todo o resto é mainstream.
Corra como
fonte
Petyr Baelish
Você nunca sabe de que lado Petyr Baelish está.
Esta entrada será incluída apenas se o número de jogadores for par. Isso garante que sempre haverá uma maioria.
fonte
C ++, O Meta Cientista
Este faz essencialmente o mesmo que O Cientista, mas não opera nas rodadas como um todo, mas nos jogadores individuais. Ele tenta mapear uma onda (ou uma função constante) para cada jogador separadamente e prevê seu movimento na próxima rodada. A partir da previsão da rodada resultante, o Meta Scientist escolhe qualquer lado que pareça ter maioria.
Se você deseja ativar as instruções de depuração, altere a linha de leitura
#if 0
para#if 1
.Compile com
g++ -O3 -std=c++0x -o MetaScientist MetaScientist.cpp
(você não precisa de avisos, então não-Wall
) e executeMetaScientist.exe
(possivelmente incluindo o argumento, é claro). Se você perguntar muito bem, posso fornecer um executável do Windows.Edição: Aparentemente, a versão anterior ficou sem tempo em torno de 600 rodadas no jogo. Isso não deveria fazer isso. Seu consumo de tempo é controlado pela
#define WINDOW (...)
linha, mais é mais lento, mas olha mais para trás.fonte
Anjo
O jogador mais puro de todos.
Programa
Comando
fonte
Artemis Fowl
No livro 7, The Atlantis Complex , Artemis Fowl contraiu uma doença psicológica (chamada Atlantis complex) que o forçou a fazer tudo em múltiplos de 5 (fala, ações, etc.). Quando ele não conseguiu fazer isso em vários múltiplos de 5, ele entrou em pânico. Faço basicamente isso: veja se o bem ou o mal (viés intencional) é divisível por 5, se não é, então entro em pânico e vejo o que era maior e corro com isso ou entre em pânico ainda mais e escolho aleatoriamente.
fonte
break;
no seuswitch
.Disparnumerofóbico
Números ímpares são aterradores.
fonte
Linus, Ruby
Procura confundir os analistas sempre quebrando o padrão .
Salvar como
linus.rb
e executar comruby linus.rb
fonte
O BackPacker
Determina um jogador que ainda escolheu a minoria correspondente e escolhe seu último voto.
A multidão
Determina um jogador que escolheu a maioria correspondente ainda e escolhe seu último voto.
fonte
goWithMajority = true
e outra onde estáfalse
. Está tudo bem ou preciso adicionar um segundo BackPacker para isso?Vidente
Isso ainda está em andamento. Ainda não testei. Eu só queria ver se o OP acha que infringe as regras ou não.
A idéia é simular a próxima rodada executando todos os outros participantes algumas vezes para obter uma probabilidade do resultado e agir em conformidade.
fonte
C ++, o cientista
Este tenta, com o histórico do que a maioria escolheu por rodada
wave
(majority()
dá a escolha da maioria em uma rodada), ajustar uma onda aos dados, de comprimento de onda2*period
e fasephase
. Assim, dado0,1,1,1,0,1,0,1,1,1,0,0,0,1,0
que selecionaperiod=3, phase=5
(maxat=={3,5}
): suas pontuações se tornam9 3 11 5 5 3 5 7 9 7 7 7 7 7 7
. Ele faz um loop em todos os períodos possíveis e, se nesse período a pontuação for maior que no máximo atual, ele armazena o{period,phase}
que ocorreu.Em seguida, extrapola a onda encontrada para a próxima rodada e leva a maioria prevista.
Compile com
g++ -O3 -std=c++0x -o Scientist Scientist.cpp
(você não precisa de avisos, então não-Wall
) e executeScientist.exe
(possivelmente incluindo o argumento, é claro). Se você perguntar muito bem, posso fornecer um executável do Windows.Ah, e não ouse mexer com o formato de entrada. Caso contrário, fará coisas estranhas.
Edição: Aparentemente, a versão anterior ficou sem tempo em torno de 600 rodadas no jogo. Isso não deveria fazer isso. Seu consumo de tempo é controlado pela
#define WINDOW (...)
linha, mais é mais lento, mas olha mais para trás.fonte
Code Runner
Portanto, para tornar as coisas interessantes, criei um script para baixar automaticamente o código de todas as respostas postadas, compilá-lo, se necessário, e executar todas as soluções de acordo com as regras. Dessa forma, as pessoas podem verificar como estão se saindo. Apenas salve este script em run_all.py (requer BeautifulSoup) e depois:
Algumas coisas:
def submission_type(lang)
.CPPSubmission
). O tipo de idioma é obtido da metatag tag< !-- language: lang-java -- >
, portanto, adicione-o se desejar que seu código seja executado (remova os espaços extras antes e depois do <>). ATUALIZAÇÃO : Agora há alguma inferência extremamente básica para tentar detectar o idioma, se ele não estiver definido.blacklist.text
e removido automaticamente de futuras avaliações. Se você corrigir seu código, basta remover sua entrada da lista negra e executar novamenteget
,Idiomas atualmente suportados:
Sem mais delongas:
fonte
A Mente Bonita, Ruby
Toma sua decisão com base em padrões de significado questionável na representação de bits da última rodada
Corra como
fonte
Piustitious, Lua
Um programa supersticioso que acredita em Sinais e Maravilhas.
execute-o com:
seguido pela entrada.
fonte
Os Winchesters
Sam e Dean são bons (na maioria das vezes).
fonte
9:1
é a proporção certa? Talvez devêssemos fazer uma mineração de dados e obter uma proporção mais precisa?9:1
parece ok para mim;)Estatístico
fonte
Math.ceil(Math.random()-Math.random())
você também pode fazer exatamenteMath.round(Math.random())
.R, um bot um tanto bayesiano
Use a tabela de frequências para cada usuário como a probabilidade anterior de saída de outros usuários.
Chamado usando
Rscript BayesianBot.R
seguido pela entrada.Edit : Apenas para esclarecer o que isso está fazendo, aqui está um passo a passo com a entrada de exemplo:
Então a linha iniciada por
result<-
, para cada jogador, escolhe aleatoriamente 0 ou 1 usando esta última tabela como pesos (ou seja, para o jogador 1, a probabilidade de escolher 0 é 2/7, de escolher 1 5/7, etc.). Ele escolhe um resultado para cada jogador / coluna e finalmente retorna o número que terminou sendo o mais comum.fonte
suíço
Sempre sustenta a neutralidade. Condenado a nunca vencer.
fonte
HAL 9000
Edit: talvez isso seja mais adequado para o HAL 9000, mas tenha cuidado! Isso é muito mau. Eu recomendo
cd
esvaziar o diretório antes de executá-lo.Invocação não tão óbvia:
Em M $
Em * nix
fonte
Vontade da maioria
Salve-o como
WotM.py
, execute comopython3 WotM.py
seguido pela entrada.Um programa simples, apenas para ver como será. Vai com o que a maioria disse da última vez, ou então aleatoriamente.
fonte
Alan Shearer
Repete o que a pessoa que ele está sentado ao lado acabou de dizer. Se a pessoa estiver errada, ela passa para a próxima pessoa e repete o que ela diz.
fonte
lastRound
antes mesmo de declará-la. Além disso, você adicionou parênteses a todos,String.length
mas não é uma função. Você pode levar sua submissão a um ponto em que ela será compilada?lastRound.length
ainda é acessado (no primeiro se) anteslastRound
é declarado (nesse caso, se é o resto). Tente compilar (e talvez executar) seu código antes de enviá-lo aqui.Mais tarde é o mal, JavaScript ( node.js )
Mede a quantidade de tempo entre as execuções. Se a diferença de horário for maior que da última vez, deve ser ruim. Caso contrário, bom.
Correr com:
node laterisevil.js
fonte
Localizador de padrões, Python
Procura um padrão recorrente e, se não conseguir encontrar, apenas acompanha a maioria.
correr com
fonte
The Turncoat
O Turncoat acredita que, por causa dos outros combatentes até agora, a maioria alternará após cada rodada entre o bem e o mal com mais frequência do que permanece do mesmo lado. Assim, ele começa a primeira rodada arbitrariamente ao lado do bem e depois alterna cada rodada na tentativa de permanecer no time vencedor ou perdedor com mais frequência do que nunca.
Depois de escrever isso, percebi que, devido às entradas baseadas na análise estatística, o momento faria com que a maioria mudasse de lado menos à medida que mais rodadas fossem concluídas. Portanto, o Turncoat Lazy.
O Turncoat preguiçoso
O Lazy Turncoat começa como o Turncoat, mas, à medida que as rondas passam, ele fica mais preguiçoso e mais preguiçoso para mudar para o outro lado.
fonte
Biógrafo, Ruby
Minha tentativa de uma entrada quase inteligente (realmente inteligente exigiria testes em campo). Escrito em Ruby, há uma chance de que isso seja muito lento, mas de qualquer maneira na minha máquina leva 0,11 segundo para calcular a última rodada quando houver 40 jogadores aleatórios, então espero que funcione bem o suficiente.
salvar como
biographer.rb
, executar comoruby biographer.rb
A idéia é que, para cada jogador, ele calcule suas chances de escolher "bom", analisando suas próprias escolhas nas últimas dez rodadas e os resultados gerais, além de encontrar ocorrências no passado em que circunstâncias idênticas (seus votos + total) resultados). Ele escolhe o comprimento mais longo, até 10 rodadas, de forma que exista qualquer precedente, e usa isso para criar uma frequência (ajustada de acordo com a Lei de Sucessão de Laplace, para que nunca tenhamos 100% de confiança em ninguém).
Em seguida, ele executa algumas simulações e vê com que frequência o Good vence. Se as simulações ocorrerem da mesma maneira, provavelmente será uma boa previsão em geral, por isso escolhe a minoria prevista. Se não estiver confiante, escolhe a maioria prevista.
fonte
Judas
Judas é uma pessoa muito boa. É uma pena que ele trai os mocinhos por alguns centavos.
fonte
,
forahistory
, ainda mais, de modo Rusher vai dividir o jogo em grupos.O jogador falacioso (Python)
Se um lado ganhou a maioria várias vezes seguidas, o jogador percebe que é mais provável que o outro lado seja a maioria na próxima rodada (certo?) E isso influencia seu voto. Ele aponta para a minoria, porque se ele chegar à minoria uma vez que provavelmente chegará lá várias vezes (certo?) E conseguirá muitos pontos.
Uso
Para a primeira rodada:
e depois:
fonte
Autômato Celular
Isso usa regras convencionais para o Jogo da Vida de Conway escolher um lado. Primeiro, uma grade 2D é criada a partir dos votos anteriores. Então, o "mundo" é avançado um estágio, e o número total de células vivas restantes é calculado. Se esse número for maior que a metade do número total de células, "bom" será escolhido. Caso contrário, o "mal" é escolhido.
Por favor, perdoe quaisquer erros, isso foi esmagado durante a minha hora de almoço. ;)
fonte
The Ridge Professor
Espero que o uso de bibliotecas seja permitido, não tenho vontade de fazer isso sem um =)
A idéia básica é treinar um classificador de regressão de crista para cada participante nas últimas rodadas, usando os 30 resultados antes de cada rodada como recursos. Originalmente, incluía a última rodada de resultados para todos os jogadores para prever o resultado de cada jogador, mas isso diminuía bastante o tempo quando o número de participantes fica maior (digamos, 50 ou mais).
Compilar
Salve o código-fonte em um arquivo chamado
ridge_professor.cc
, baixe a biblioteca Eigen e descompacte a pasta Eigen encontrada dentro da mesma pasta que o arquivo de origem. Compile comg++ -I. -O3 -ffast-math -o ridge_professor ridge_professor.cc
.Para correr
chame ridge_professor.exe e forneça o argumento conforme necessário.
Pergunta, questão
Como ainda não posso comentar em lugar algum, perguntarei aqui: o limite de tamanho do argumento no Windows não torna impossível chamar os binários resultantes com todo o histórico em algumas centenas de voltas? Eu pensei que você não pode ter mais do que ~ 9000 caracteres no argumento ...
fonte
Crowley
Porque os Winchesters são muito menos interessantes sem esse sujeito. Ele obviamente apoia o mal ... a menos que seja necessário cuidar de um mal maior.
Olho para as duas últimas voltas (0 vírgulas até agora e 1 vírgula até agora) e, se as duas deixarem o mal vencer, eu voto no bem. Caso contrário, eu voto no mal.
fonte