Classificação mais recente @ 02-08-2014 12:00
| Pos # | Author | Name | Language | Score | Win | Draw | Loss | Avg. Dec. Time |
+-------+----------------------+-------------------------+------------+-------+-------+-------+-------+----------------+
| 1st | Emil | Pony | Python2 | 064 | 064 | 000 | 005 | 0026.87 ms |
| 2nd | Roy van Rijn | Gazzr | Java | 062 | 062 | 001 | 006 | 0067.30 ms |
| 2nd | Emil | Dienstag | Python2 | 062 | 062 | 001 | 006 | 0022.19 ms |
| 4th | ovenror | TobiasFuenke | Python2 | 061 | 061 | 001 | 007 | 0026.89 ms |
| 5th | PhiNotPi | BayesianBot | Perl | 060 | 060 | 000 | 009 | 0009.27 ms |
| 6th | Claudiu | SuperMarkov | Python2 | 058 | 058 | 001 | 010 | 0026.77 ms |
| 7th | histocrat | Alternator | Ruby | 057 | 057 | 001 | 011 | 0038.53 ms |
| 8th | histocrat | LeonardShelby | Ruby | 053 | 053 | 000 | 016 | 0038.55 ms |
| 9th | Stretch Maniac | SmarterBot | Java | 051 | 051 | 002 | 016 | 0070.02 ms |
| 9th | Martin Büttner | Markov | Ruby | 051 | 051 | 003 | 015 | 0038.45 ms |
| 11th | histocrat | BartBot | Ruby | 049 | 049 | 001 | 019 | 0038.54 ms |
| 11th | kaine | ExcitingishBot | Java | 049 | 049 | 001 | 019 | 0065.87 ms |
| 13th | Thaylon | UniformBot | Ruby | 047 | 047 | 001 | 021 | 0038.61 ms |
| 14th | Carlos Martinez | EasyGame | Java | 046 | 046 | 002 | 021 | 0066.44 ms |
| 15th | Stretch Maniac | SmartBot | Java | 045 | 045 | 001 | 023 | 0068.65 ms |
| 16th | Docopoper | RoboticOboeBotOboeTuner | Python2 | 044 | 044 | 000 | 025 | 0156.55 ms |
| 17th | Qwix | Analyst | Java | 043 | 043 | 001 | 025 | 0069.06 ms |
| 18th | histocrat | Analogizer | Ruby | 042 | 042 | 000 | 027 | 0038.58 ms |
| 18th | Thaylon | Naan | Ruby | 042 | 042 | 004 | 023 | 0038.48 ms |
| 20th | Thaylon | NitPicker | Ruby | 041 | 041 | 000 | 028 | 0046.21 ms |
| 20th | bitpwner | AlgorithmBot | Python2 | 041 | 041 | 001 | 027 | 0025.34 ms |
| 22nd | histocrat | WereVulcan | Ruby | 040 | 040 | 003 | 026 | 0038.41 ms |
| 22nd | Ourous | QQ | Cobra | 040 | 040 | 003 | 026 | 0089.33 ms |
| 24th | Stranjyr | RelaxedBot | Python2 | 039 | 039 | 001 | 029 | 0025.40 ms |
| 25th | JoshDM | SelfLoathingBot | Java | 038 | 038 | 001 | 030 | 0068.75 ms |
| 25th | Ourous | Q | Cobra | 038 | 038 | 001 | 030 | 0094.04 ms |
| 25th | Ourous | DejaQ | Cobra | 038 | 038 | 001 | 030 | 0078.31 ms |
| 28th | Luis Mars | Botzinga | Java | 037 | 037 | 002 | 030 | 0066.36 ms |
| 29th | kaine | BoringBot | Java | 035 | 035 | 000 | 034 | 0066.16 ms |
| 29th | Docopoper | OboeBeater | Python2 | 035 | 035 | 002 | 032 | 0021.92 ms |
| 29th | Thaylon | NaanViolence | Ruby | 035 | 035 | 003 | 031 | 0038.46 ms |
| 32nd | Martin Büttner | SlowLizard | Ruby | 034 | 034 | 004 | 031 | 0038.32 ms |
| 33rd | Kyle Kanos | ViolentBot | Python3 | 033 | 033 | 001 | 035 | 0032.42 ms |
| 34th | HuddleWolf | HuddleWolfTheConqueror | .NET | 032 | 032 | 001 | 036 | 0029.86 ms |
| 34th | Milo | DogeBotv2 | Java | 032 | 032 | 000 | 037 | 0066.74 ms |
| 34th | Timmy | DynamicBot | Python3 | 032 | 032 | 001 | 036 | 0036.81 ms |
| 34th | mccannf | YAARBot | JS | 032 | 032 | 002 | 035 | 0100.12 ms |
| 38th | Stranjyr | ToddlerProof | Java | 031 | 031 | 010 | 028 | 0066.10 ms |
| 38th | NonFunctional User2..| IHaveNoIdeaWhatImDoing | Lisp | 031 | 031 | 002 | 036 | 0036.26 ms |
| 38th | john smith | RAMBOBot | PHP | 031 | 031 | 002 | 036 | 0014.53 ms |
| 41st | EoinC | SimpleRandomBot | .NET | 030 | 030 | 005 | 034 | 0015.68 ms |
| 41st | Martin Büttner | FairBot | Ruby | 030 | 030 | 006 | 033 | 0038.23 ms |
| 41st | Docopoper | OboeOboeBeater | Python2 | 030 | 030 | 006 | 033 | 0021.93 ms |
| 44th | undergroundmonorail | TheGamblersBrother | Python2 | 029 | 029 | 000 | 040 | 0025.55 ms |
| 45th | DrJPepper | MonadBot | Haskel | 028 | 028 | 002 | 039 | 0008.23 ms |
| 46th | Josef E. | OneBehind | Java | 027 | 027 | 007 | 035 | 0065.87 ms |
| 47th | Ourous | GitGudBot | Cobra | 025 | 025 | 001 | 043 | 0053.35 ms |
| 48th | ProgramFOX | Echo | .NET | 024 | 024 | 004 | 041 | 0014.81 ms |
| 48th | JoshDM | SelfHatingBot | Java | 024 | 024 | 005 | 040 | 0068.88 ms |
| 48th | Trimsty | Herpetologist | Python3 | 024 | 024 | 002 | 043 | 0036.93 ms |
| 51st | Milo | DogeBot | Java | 022 | 022 | 001 | 046 | 0067.86 ms |
| 51st | William Barbosa | StarWarsFan | Ruby | 022 | 022 | 002 | 045 | 0038.48 ms |
| 51st | Martin Büttner | ConservativeBot | Ruby | 022 | 022 | 001 | 046 | 0038.25 ms |
| 51st | killmous | MAWBRBot | Perl | 022 | 022 | 000 | 047 | 0016.30 ms |
| 55th | Mikey Mouse | LizardsRule | .NET | 020 | 020 | 007 | 042 | 0015.10 ms |
| 55th | ja72 | BlindForesight | .NET | 020 | 020 | 001 | 048 | 0024.05 ms |
| 57th | robotik | Evolver | Lua | 019 | 019 | 001 | 049 | 0008.19 ms |
| 58th | Kyle Kanos | LexicographicBot | Python3 | 018 | 018 | 003 | 048 | 0036.93 ms |
| 58th | William Barbosa | BarneyStinson | Lua | 018 | 018 | 005 | 046 | 0005.11 ms |
| 60th | Dr R Dizzle | BartSimpson | Ruby | 017 | 017 | 001 | 051 | 0038.22 ms |
| 60th | jmite | IocainePowder | Ruby | 017 | 017 | 003 | 049 | 0038.50 ms |
| 60th | ArcticanAudio | SpockOrRock | PHP | 017 | 017 | 001 | 051 | 0014.19 ms |
| 60th | Dr R Dizzle | BetterLisaSimpson | Ruby | 017 | 017 | 000 | 052 | 0038.23 ms |
| 64th | Dr R Dizzle | LisaSimpson | Ruby | 016 | 016 | 002 | 051 | 0038.29 ms |
| 65th | Martin Büttner | Vulcan | Ruby | 015 | 015 | 001 | 053 | 0038.26 ms |
| 65th | Dr R Dizzle | Khaleesi | Ruby | 015 | 015 | 005 | 049 | 0038.29 ms |
| 67th | Dr R Dizzle | EdwardScissorHands | Ruby | 014 | 014 | 002 | 053 | 0038.21 ms |
| 67th | undergroundmonorail | TheGambler | Python2 | 014 | 014 | 002 | 053 | 0025.47 ms |
| 69th | cipher | LemmingBot | Python2 | 011 | 011 | 002 | 056 | 0025.29 ms |
| 70th | Docopoper | ConcessionBot | Python2 | 007 | 007 | 000 | 062 | 0141.31 ms |
+-------+----------------------+-------------------------+------------+-------+-------+-------+-------+----------------+
Total Players: 70
Total Matches Completed: 2415
Total Tourney Time: 06:00:51.6877573
Notas dos torneios
- WOO HOO 70 BOTS
- Emil ainda está com KOTH
Pony
e seu novo botDienstag
ocupa o 3º lugar - Parabéns a Roy por pular para o 2º lugar com seu
Gazzr
bot - William Barbosa ganha o prêmio Quick Draw por seu bot
BarneyStinson
E o prêmio Slow Poke vai para o Docopoper por seus bots
R.O.B.O.T
eConcessionbot
que eram> 140ms por mãoRegistros disponíveis em https://github.com/eoincampbell/big-bang-game/blob/master/tourneys/Tournament-2014-08-01-23-24-00.zip?raw=true
Bots excluídos
- BashRocksBot - ainda não se alegra com o .net executando scripts cygwin bash
- CounterPreferenceBot - aguardando correção de bug
- RandomlyWeighted - aguardando correção de bug
- CasinoShakespeare - excluído porque requer uma conexão ativa à Internet
Pergunta publicada original
Você foi até a casa de seus amigos para o confronto mais épico de todos os tempos: Rock, Paper, Scissors, Lizard, Spock. No verdadeiro estilo nerd-tastic do BigBang, nenhum dos jogadores está jogando sozinho, mas criou bots de console para jogar em seu nome. Você sacou sua chave USB e a entregou ao Sheldor the Conqueror para inclusão no showdown. Penny desmaia. Ou talvez Howard desmaie. Não julgamos aqui no apartamento de Leonard.
Regras
Aplicam-se as regras padrão Pedra, Papel, Tesoura, Lagarto e Spock.
- Tesoura de corte de papel
- Papel cobre Rock
- Esmaga rochas Lagarto
- Veneno de lagarto Spock
- Spock esmaga tesoura
- Tesoura decapita Lagarto
- Lagarto come papel
- Papel nega Spock
- Spock vaporiza a rocha
- Pedra esmaga Tesoura
O bot de cada jogador jogará uma partida contra o outro bot no torneio.
Cada partida consistirá em 100 iterações de um jogo RPSLV.
Após cada partida, o vencedor é o jogador que ganhou o maior número de jogos / mãos em 100.
Se você vencer uma partida, você receberá 1 ponto na tabela de classificação. No resultado de uma partida empatada, nenhum jogador ganhará um ponto.
Requisitos de bot
Seu bot deve ser executável na linha de comando.
A caixa * nix de Sheldor morreu, então estamos executando o Windows 8 Gaming Laptop para garantir que a solução fornecida possa funcionar no Windows. A Sheldor ofereceu graciosamente a instalação de quaisquer tempos de execução necessários (dentro do razoável) para poder executar sua solução. (.NET, Java, Php, Python, Ruby, PowerShell ...)
Entradas
No primeiro jogo de cada partida, nenhum argumento é fornecido ao seu bot. Em cada jogo subseqüente de cada partida: - Arg1 conterá o histórico de suas mãos / decisões de bots nesta partida. - Arg2 conterá o histórico das mãos / decisões de seus oponentes nesta partida.
O histórico será representado por uma sequência de letras maiúsculas representando as possíveis mãos que você pode jogar.
| R | Rock |
| P | Paper |
| S | Scissors |
| L | Lizard |
| V | Spock |
Por exemplo
- Jogo 1: MyBot.exe
- Jogo 2: MyBot.exe SV
- Jogo 3: MyBot.exe SS VL
- Jogo 4: MyBot.exe SSR VLS
Resultado
Seu bot deve escrever uma resposta de um único personagem representando sua "mão" para cada jogo. O resultado deve ser gravado em STDOUT e o bot deve sair. Letras maiúsculas válidas estão abaixo.
| R | Rock |
| P | Paper |
| S | Scissors |
| L | Lizard |
| V | Spock |
No caso em que seu bot não retorna uma mão válida (ou seja, 1 das 5 letras maiúsculas acima, você perde automaticamente essa mão e a partida continua.
No caso em que ambos os bots não retornam uma mão válida, o jogo é considerado empate e a partida continua.
Formato de correspondência
Cada bot enviado jogará uma partida contra o outro bot no torneio.
Cada partida durará exatamente 100 jogos.
As partidas serão disputadas anonimamente, você não terá um conhecimento avançado do bot específico contra o qual está jogando, no entanto, poderá usar toda e qualquer informação que puder obter de sua tomada de decisão durante o histórico da partida atual para alterar sua estratégia contra o seu adversário. oponente. Você também pode acompanhar o histórico de seus jogos anteriores para criar padrões / heurísticas, etc ... (Veja as regras abaixo)
Durante um único jogo, o mecanismo de orquestração executará seu bot e o de seus oponentes separados por 100 milissegundos e comparará os resultados para evitar colisões de PRNG no mesmo idioma / tempo de execução. (isso realmente aconteceu comigo durante o teste).
Julgamento e restrições
O Dr. Sheldon Cooper, disfarçado de Sheldor, o Conquistador, gentilmente se ofereceu para supervisionar o andamento do torneio. Sheldor, o Conquistador, é um supervisor justo e justo (principalmente). Todas as decisões de Sheldor são finais.
O jogo será realizado de maneira justa e adequada:
- Seu script / programa bot será armazenado no mecanismo de orquestração em uma subpasta
Players\[YourBotName]\
- Você pode usar a subpasta
Players\[YourBotName]\data
para registrar quaisquer dados ou histórico de jogos do torneio atual à medida que prossegue. Os diretórios de dados serão eliminados no início de cada corrida do torneio. - Você não pode acessar o diretório de jogadores de outro jogador no torneio
- Seu bot não pode ter um código específico que tenha como alvo outro comportamento específico de bots
- Cada jogador pode enviar mais de um bot para jogar, desde que não interaja ou não se ajude.
Editar - restrições adicionais
- Em relação a desistências, elas não serão suportadas. Seu bot deve jogar uma das 5 mãos válidas. Vou testar cada bot fora do torneio com alguns dados aleatórios para garantir que eles se comportem. Quaisquer bots que lançam erros (ou seja, perdem erros) serão excluídos do torneio até que sejam corrigidos.
- Os bots podem ser derivados desde que sejam sucintamente diferentes em seu comportamento. Bots (inclusive em outros idiomas) que executam exatamente o mesmo comportamento de um bot existente serão desqualificados
- Já existem bots de spam para o seguinte, então não reenvie
- Rock - Bart Simpson
- Papel - LisaSimpson
- Tesoura - EdwardSchandhands
- Spock - Vulcan
- Lagarto - Khaleesi
- Pseudo-aleatório - SimpleRandomBot & FairBot
- Psuedo Random RPS - ConservativeBot
- Psuedo Random LV - Barney Stinson
- Os robôs não podem chamar serviços de terceiros ou recursos da Web (ou qualquer outra coisa que diminua significativamente a velocidade / tempo de tomada de decisão das correspondências).
CasinoShakespeare
é a única exceção, pois esse bot foi enviado antes da adição dessa restrição.
Sheldor atualizará esta pergunta o mais rápido possível com os resultados do torneio, à medida que mais bots forem enviados.
Programa de Orquestração / Controle
O programa de orquestração, juntamente com o código fonte de cada bot, está disponível no github.
https://github.com/eoincampbell/big-bang-game
Detalhes da submissão
Seu envio deve incluir
- O nome do seu bot
- Seu código
- Um comando para
- execute seu bot a partir do shell, por exemplo
- ruby myBot.rb
- python3 myBot.py
- OU
- primeiro compile seus dois e depois execute-o. por exemplo
- csc.exe MyBot.cs
- MyBot.exe
Envio de amostra
BotName: SimpleRandomBot
Compile: "C:\Program Files (x86)\MSBuild\12.0\Bin\csc.exe" SimpleRandomBot.cs
Run: SimpleRandomBot [Arg1] [Arg2]
Código:
using System;
public class SimpleRandomBot
{
public static void Main(string[] args)
{
var s = new[] { "R", "P", "S", "L", "V" };
if (args.Length == 0)
{
Console.WriteLine("V"); //always start with spock
return;
}
char[] myPreviousPlays = args[0].ToCharArray();
char[] oppPreviousPlays = args[1].ToCharArray();
Random r = new Random();
int next = r.Next(0, 5);
Console.WriteLine(s[next]);
}
}
Esclarecimento
Qualquer dúvida, pergunte nos comentários abaixo.
fonte
Respostas:
Pônei (Python 2)
Isso se baseia em um bot de pedra-papel-tesoura que escrevi há algum tempo para um desafio de programação no final de uma aula on-line do Udacity . Mudei para incluir Spock e lagarto e fiz algumas melhorias.
O programa possui 11 estratégias simples diferentes, cada uma com 5 variantes. Ele escolhe dentre estes, com base em quão bem eles teriam se saído nas últimas rodadas.
Eu removi uma estratégia de fallback que jogava aleatoriamente contra oponentes mais fortes. Eu acho que é mais divertido assim.
Correr como:
Edit : Fiz uma pequena alteração colocando um viés em direção à estratégia mais simples (ou seja, sempre jogue a mesma jogada) em casos inseguros. Isso ajuda um pouco a não tentar encontrar padrões excessivamente complicados onde não existem, por exemplo, em bots como o ConservativeBot.
Nota : Tentei explicar a estratégia básica de correspondência do histórico que esse bot usa na postagem para meu outro bot Dienstag .
fonte
Markov, Ruby
Examina os dois últimos movimentos do oponente e determina os possíveis (e mais prováveis) acompanhamentos. Se a combinação não foi escolhida antes, ele apenas usa todos os movimentos do oponente (até agora). Então ele coleta todas as respostas possíveis para essas e escolhe uma aleatória.
Corra como
fonte
ConservativeBot, Ruby
Coisas novas são coisas ruins.
Corra como
fonte
Fã de Guerra nas Estrelas - Ruby
Dane-se, Spock
Execute-o como:
fonte
Barney Stinson - Lua
Eu só tenho uma regra: o novo é sempre melhor. Dane-se o velho Jo Ken Po ou como quiser.
Execute-o como:
fonte
Bot chato (Java)
Ele assume que todos sempre jogam a mesma coisa e planejam de acordo. Ele geralmente pega pedras em gravatas, porque todos os outros, certo?
fonte
max
Iocaína em pó, Ruby
Baseado na estratégia RPS (roubada descaradamente) aqui . A aparência do bot escolhe um palpite idêntico ao bot de Markov, mas assume que o oponente adivinhou o que escolherá e escolhe uma jogada para vencê-la de acordo.
Observe que eu apenas adaptei a idéia básica da estratégia vinculada, não a segui em detalhes.
Corra como
fonte
HuddleWolfTheConqueror - C #
O HuddleWolf está de volta e melhor do que nunca. Ele derrotará Sheldor, o Conquistador, em seu próprio jogo bobo. O HuddleWolf é inteligente o suficiente para identificar e combater os spammerbots. Para oponentes mais inteligentes, HuddleWolf usa seu conhecimento das estatísticas básicas da 5ª série e utiliza uma jogada de dados ponderada com base na história dos jogos da oposição.
fonte
Criança pequena
Esse bot bastante estúpido assume que está jogando com uma criança que "perseguirá" seus movimentos, sempre tentando vencer o que foi jogado pela última vez. Se o bot for batido várias vezes seguidas, ele salta para um novo ponto no padrão. É baseado na minha estratégia de sempre derrotar meu irmão muito mais novo. :)
EDIT :: Alterada a duração de uma sequência de perdas necessária para saltar para lançamentos aleatórios. Também foi corrigido um erro grave com o salto aleatório.
Salve como
ToddlerProof.java
, compile e execute comjava ToddlerProof [me] [them]
fonte
Bart Simpson
"Bom e velho rock! Nada supera o rock!"
Correr como
Lisa Simpson
"Pobre e previsível Bart. Sempre escolhe o rock."
Correr como
Better Lisa Simpson
Eu me senti mal por tornar Lisa tão estúpida, então eu permiti que ela escolhesse aleatoriamente entre as duas mãos que baterão rock. Ainda estúpida, mas ela é uma Simpson, afinal. Talvez um giz de cera tenha ficado preso em seu cérebro?
Correr como
fonte
Eco
Escrito em C #. Compile com
csc Echo.cs
. Corra comoEcho.exe ARG1 ARG2
.Na primeira execução, o Echo usa uma opção aleatória. Toda corrida após a primeira, o Echo simplesmente repete a última ação do oponente.
fonte
Vulcan, Ruby
Meus dedos estão colados.
Corra como
(Eu acho que essa é a única estratégia de personagem para a sua configuração de fundo.)
fonte
Tiranossauro, Godzilla, Barney ... Regra dos lagartos. Ocasionalmente, eles se metem em problemas e precisam ligar para Spock ou jogar Rocks
fonte
BayesianBot, Perl (agora v2!)
Acima de tudo, este é um programa único. Nele, você verá a brilhante fusão de estatísticas e a horrível forma de programação. Além disso, esse bot provavelmente quebra muitas regras das estatísticas bayesianas, mas o nome parece mais legal.
A essência do núcleo desse bot é a criação de 250 modelos preditivos diferentes. Cada modelo assume a forma de "Dado que joguei rock no último turno e meu oponente jogou tesoura há dois turnos atrás, esta é a distribuição de probabilidade para o próximo movimento do meu oponente". Cada distribuição de probabilidade assume a forma de uma distribuição Dirichlet multidimensional.
A cada turno, as previsões de todos os modelos aplicáveis (normalmente 10) são multiplicadas para formar uma previsão geral, que é usada para determinar quais movimentos têm o maior retorno esperado.
Edit 1: Nesta versão, mudei a distribuição anterior e tornei o bot mais randomizado quando está perdendo.
Existem algumas coisas que podem estar sujeitas a melhorias, como o número de modelos (250 é apenas um número de 3 dígitos), a escolha da distribuição anterior (atualmente Dir (3,3,3,3,3)) e o método de fusão de previsões. Além disso, nunca me preocupei em normalizar nenhuma das distribuições de probabilidade, o que é bom por enquanto, porque estou multiplicando-as.
Não tenho grandes expectativas, mas espero que este bot seja capaz de se sair bem.
Eu tenho executado este programa da seguinte forma:
fonte
DynamicBot
O bot dinâmico está quase sempre mudando. Realmente odeia se repetir
Idioma: Python 3.4.1
Comando:
python dynamicbot.py <history>
oupython3 dynamicbot.py <history>
dependendo do seu sistemafonte
SmartBot - Java
Minha primeira entrada para qualquer coisa neste site!
Embora não seja um nome muito criativo ...
O SmartBot encontra sequências de movimentos em que os movimentos do oponente e / ou de si são semelhantes aos últimos movimentos feitos e planejados de acordo.
name = SmartBot
Acho que para executá-lo, me corrija se estiver errado.
java -jar SmartBot.jar
Ele atribui uma pontuação para cada próximo movimento possível pelo número de vezes que padrões semelhantes ocorreram.
Favorece ligeiramente o lagarto.
fonte
java ABot
deve funcionar (lembre-se o nome do arquivo o mesmo que a classe pública)SpockOrRock - PHP
Quando jogado no mundo real, a maioria das pessoas instintivamente escolhe uma tesoura. Este bot escolhe Spock ou Rock para vencer o jogador médio. Não se preocupa com as rodadas anteriores.
correr com
php spockorrock.php
fonte
SlowLizard, Ruby
Depois de começar com o Lizard, ele sempre escolhe um movimento aleatório que supera o movimento anterior do oponente.
Corra como
fonte
LexicographicBot
Este bot gosta de pedir suas cartas, então ele escolherá uma resposta que é 1 maior do que seu oponente deu na rodada anterior - a menos que o oponente tenha escolhido Vulcan, ele escolhe aleatoriamente uma resposta.
Isso espera que a mão do oponente seja distribuída em segundo:
fonte
Werevulcan - Ruby
Correr como
ruby werevulcan.rb
O werevulcan parece normal durante o dia, mas quando a lua nasce, seus ouvidos ficam pontudos e seus movimentos ficam mais lógicos.
fonte
Analogizador - Ruby
Corra com
ruby analogizer.rb
. Fiz uma correção lógica no código, mas não faço ideia por que houve erros nisso.Supõe que o bot oponente esteja sempre reagindo ao meu movimento anterior e escolhendo algo que o derrote, algo que o perca, ou o mesmo movimento, possivelmente de um conjunto restrito de movimentos possíveis. Em seguida, ele escolhe a melhor jogada, considerando essa suposição.
Exceto que os dez primeiros movimentos são codificados: primeiro, eu finjo que só conheço lagarto, depois presumo que meu oponente sempre jogue algo para vencer a última coisa que joguei até ter dados suficientes para uma análise adequada.
fonte
Java - SelfLoathingBot
Bot começa aleatoriamente, então ~ 33% para se tornar aleatório, ou ~ 33% para jogar uma tática vencedora contra qualquer uma das jogadas imediatamente anteriores, com 50% de escolha da tática vencedora.
fonte
O analista
O analista analisa algumas coisas e faz algumas coisas para tentar vencê-lo.
compilar
javac Analyst.java
e executar comojava Analyst
fonte
O jogador - Python 2
Ao contrário do nome, a única aleatoriedade usada neste programa é na primeira rodada, quando não há informações. Em vez disso, recebeu o nome da falácia do jogador, a crença de que, se um evento aleatório aconteceu com menos frequência no passado, é mais provável que ocorra no futuro. Por exemplo, se você jogar uma moeda justa 20 vezes e os 15 primeiros forem cara, a falácia do jogador afirma que as chances de os flips restantes serem caudas aumentam. Claro, isso é falso; Independentemente dos flips anteriores, as chances de uma moeda chegar com coroa é sempre de 50%.
Este programa analisa a história do oponente, encontra os 2 movimentos que ele usou menos até agora e assume que o movimento do oponente desta vez será um desses dois. Atribuindo 2 a uma vitória, 1 a um empate e 0 a uma perda, ele encontra o lance com a pontuação máxima contra esses dois lances previstos e o lança.
O irmão do jogador - Python 2
Ao mudar o
MODE
variável para 0, este programa funcionará com base em uma falácia relacionada, também conhecida como falácia do jogador. Ele afirma que, se um evento aleatório tiver ocorrido com mais frequência no passado, é mais provável que ocorra no futuro. Por exemplo, se você jogar uma moeda 20 vezes e os 15 primeiros forem cara, essa falácia indica que os flips restantes são mais propensos a ser cara, já que atualmente há uma raia. No modo 0, este programa opera da mesma maneira, exceto que assume que o oponente fará um dos dois movimentos que ele realiza com mais freqüência até agora.Então, sim, esses dois programas têm apenas um caractere. :)
fonte
Dienstag (Python 2)
Minha primeira entrada Pony parece se sair muito bem com toda a sua segunda adivinhação (tripple adivinhação, ...) e meta raciocínio. Mas isso é mesmo necessário?
Então, aqui está Dienstag, o amiguinho de Pony, com apenas uma das 55 estratégias: prever o próximo passo do oponente e vencê-lo.
A longo prazo, Dienstag vence ou empata com todos os Bots entre os dez primeiros da tabela de classificação atual. Exceto por Pony.
Correr como:
Admito que o código esteja um pouco ofuscado. Se alguém quiser saber mais sobre isso, posso acrescentar explicações.
Edit: Aqui está um
pequenoexemplo de explicação para explicar a ideia:O programa obtém o histórico próprio e os movimentos do oponente:
sys.arg[1] = 'LLVLLVL', sys.arg[2] = 'RPSPSSP'
O histórico é combinado em uma lista de pares e os movimentos são traduzidos para números (R = 0, ...):
hist = [[4, 0], [4, 1], [3, 2], [4, 1], [4, 2], [3, 2], [4, 1]]
O número de rodadas disputadas até agora é determinado:
N = 7
A idéia básica agora é procurar a cadeia mais longa e ininterrupta, exatamente dos últimos movimentos da história anterior. O programa controla onde essa cadeia termina na lista
cand
(para 'candidatos'). No começo, sem verificação, todas as posições no histórico, exceto a última, são consideradas:cand = [0, 1, 2, 3, 4, 5]
Agora o comprimento das cadeias possíveis é aumentado passo a passo. Para o comprimento da corrente
l = 1
, procura ocorrências anteriores do último par de movimentos[4, 1]
. Isso pode ser encontrado na posição do histórico1
e3
. Somente estes são mantidos nacand
lista:cand = [1, 3]
Em seguida,
l = 2
verifica qual dos possíveis candidatos foi precedido pelo penúltimo par de movimentos[3, 2]
. Este é apenas o caso da posição3
:cand = [3]
Para
l = 3
mais, não há cadeias anteriores desse comprimento ecand
estariam vazias. Nesse caso, o último elemento decand
é mantido:cand = [3]
O bot agora assume que a história se repetirá. A última vez que o Caim
[3, 2], [4, 1]
ocorreu, foi seguido por[4, 2]
. Assim, o oponente jogou2
(tesoura) que pode ser derrotado por(2+1)%5 = 3
(Spock) ou(2+3)%5 = 0
(pedra). O bot responde, com a primeira ou a segunda alternativa, dependendo seN
é ímpar ou mesmo apenas para introduzir alguma variação.Aqui mova
3
é escolhido o que é então traduzido de volta:print 'V'
Nota: Dienstag tem complexidade de tempo O ( N 2 ) para retornar o próximo movimento após N rodadas. O pônei tem complexidade de tempo O ( N 3 ). Portanto, nesse aspecto, eles provavelmente são muito piores que a maioria das outras entradas.
fonte
Bash Rocks
O cygwin é pedir demais em tempo de execução?
bashrocks.sh:
e execute assim:
fonte
R
. ;)dos2unix
o arquivo no cygwin antes de executá-lo?Algoritmo
Um algoritmo para ter um.
Porque sempre é mais seguro fazer alguma coisa, quanto mais complicado, melhor.
Ainda não fizemos matemática séria, portanto esse algoritmo pode não ser tão eficaz.
Programa Python 2:
python algorithm.py
fonte
FairBot, Ruby
Vamos começar simples.
Corra como
fonte
ViolentBot
Este bot escolhe a opção mais violenta com base na escolha anterior do oponente:
Correr como
fonte
Haskell - MonadBot
Não sei se o ghc é considerado "dentro da razão", mas vamos supor que sim. A estratégia deste bot é combater o movimento mais popular de seu oponente.
Código:
fonte