Clasificación más reciente @ 2014-08-02 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 del torneo
- WOO HOO 70 BOTS
- Emil todavía está KOTH
Pony
y su nuevo botDienstag
ocupa el 3er lugar - Felicidades a Roy por saltar al segundo lugar con su
Gazzr
bot - William Barbosa gana el premio Quick Draw por su bot
BarneyStinson
Y el premio Slow Poke va para Docopoper por sus bots
R.O.B.O.T
yConcessionbot
quienes fueron> 140ms por manoRegistros disponibles @ https://github.com/eoincampbell/big-bang-game/blob/master/tourneys/Tournament-2014-08-01-23-24-00.zip?raw=true
Bots excluidos
- BashRocksBot - todavía no es divertido con .net ejecutando scripts cygwin bash
- CounterPreferenceBot - esperando corrección de errores
- RandomlyWeighted - en espera de corrección de errores
- Casino Shakespeare: excluido porque requiere una conexión a Internet activa
Pregunta original publicada
Has girado hacia la casa de tus amigos para el enfrentamiento más épico de la historia de Rock, Paper, Scissors, Lizard, Spock. En el verdadero estilo nerd-tastic de BigBang, ninguno de los jugadores está jugando solo, pero ha creado bots de consola para jugar en su nombre. Sacas tu llave USB y se la entregas al Sheldor the Conqueror para que la incluya en el enfrentamiento. Penny se desmaya. O tal vez Howard se desmaya. No juzgamos aquí en el departamento de Leonard.
Reglas
Se aplican las reglas estándar de piedra, papel, tijera, lagarto y Spock.
- Tijeras cortadas en papel
- Cubiertas de papel Rock
- Roca aplasta a lagarto
- Veneno de lagarto Spock
- Spock rompe tijeras
- Tijeras decapitan a Lizard
- Lagarto come papel
- El papel refuta a Spock
- Spock vaporiza roca
- Tijeras de piedra
El bot de cada jugador jugará un partido contra el bot del torneo.
Cada partida constará de 100 iteraciones de un juego RPSLV.
Después de cada partido, el ganador es el jugador que ha ganado la mayor cantidad de juegos / manos de 100.
Si ganas un partido, se te asignará 1 punto en la tabla de la liga. En el resultado de un empate, ninguno de los jugadores ganará un punto.
Requisitos de bot
Su bot debe ser ejecutable desde la línea de comando.
Sheldor's * nix box ha muerto, por lo que lo estamos ejecutando desde su computadora portátil con Windows 8 Gaming, así que asegúrese de que su solución provista pueda ejecutarse en Windows. Sheldor se ha ofrecido gentilmente a instalar cualquier tiempo de ejecución requerido (dentro de lo razonable) para poder ejecutar su solución. (.NET, Java, Php, Python, Ruby, Powershell ...)
Entradas
En el primer juego de cada partida no se proporcionan argumentos a su bot. En cada juego posterior de cada partida: - Arg1 contendrá el historial de tus manos / decisiones de bots en esta partida. - Arg2 contendrá el historial de las manos / decisiones de tus oponentes en este partido.
La historia estará representada por una secuencia de letras mayúsculas que representan las posibles manos que puedes jugar.
| R | Rock |
| P | Paper |
| S | Scissors |
| L | Lizard |
| V | Spock |
P.ej
- Juego 1: MyBot.exe
- Juego 2: MyBot.exe SV
- Juego 3: MyBot.exe SS VL
- Juego 4: MyBot.exe SSR VLS
Salida
Su bot debe escribir una respuesta de un solo personaje que represente su "mano" para cada juego. El resultado debe escribirse en STDOUT y el bot debe salir. Las letras mayúsculas simples válidas están debajo.
| R | Rock |
| P | Paper |
| S | Scissors |
| L | Lizard |
| V | Spock |
En el caso de que su bot no devuelva una mano válida (es decir, 1 de las 5 letras mayúsculas anteriores), perderá automáticamente esa mano y la partida continuará.
En el caso de que ambos bots no devuelvan una mano válida, entonces el juego se considera un empate y el partido continúa.
Formato de partido
Cada bot enviado jugará un partido uno contra el otro en el torneo.
Cada partido durará exactamente 100 juegos.
Los partidos se jugarán de forma anónima, no tendrás un conocimiento avanzado del bot específico contra el que estás jugando, sin embargo, puedes usar toda la información que puedas obtener de su toma de decisiones durante el historial del partido actual para alterar tu estrategia contra tu adversario. También puede realizar un seguimiento del historial de sus juegos anteriores para construir patrones / heurística, etc. (consulte las reglas a continuación)
Durante un solo juego, el motor de orquestación ejecutará su bot y sus oponentes bot a 100 milisegundos de distancia y luego comparará los resultados para evitar cualquier colisión de PRNG en el mismo idioma / tiempo de ejecución. (Esto realmente me sucedió durante las pruebas).
Juicio y restricciones
El Dr. Sheldon Cooper, disfrazado de Sheldor el Conquistador, se ha ofrecido amablemente a supervisar el funcionamiento del torneo. Sheldor the Conqueror es un supervisor justo y justo (en su mayoría). Todas las decisiones de Sheldor son finales.
Los juegos se realizarán de manera justa y adecuada:
- Su script / programa bot se almacenará en el motor de orquestación en una subcarpeta
Players\[YourBotName]\
- Puede usar la subcarpeta
Players\[YourBotName]\data
para registrar cualquier dato o historial del juego del torneo actual a medida que avanza. Los directorios de datos se eliminarán al comienzo de cada carrera del torneo. - No puedes acceder al directorio de jugadores de otro jugador en el torneo
- Su bot no puede tener un código específico que apunte a otro comportamiento específico de bots
- Cada jugador puede enviar más de un bot para jugar siempre que no interactúen o se ayuden entre sí.
Editar - Restricciones adicionales
- En cuanto a los decomisos, no serán compatibles. Tu bot debe jugar una de las 5 manos válidas. Probaré cada bot fuera del torneo con algunos datos aleatorios para asegurarme de que se comporten. Cualquier bot que arroje errores (es decir, perderá errores) será excluido del torneo hasta que se corrijan.
- Los bots pueden ser derivados siempre que sean sucintamente diferentes en su comportamiento. Los bots (incluso en otros idiomas) que realicen exactamente el mismo comportamiento que un bot existente serán descalificados
- Ya hay bots de spam para lo siguiente, así que no vuelva a enviar
- Rock - BartSimpson
- Papel - LisaSimpson
- Tijera - EdwardScissorhands
- Spock - Vulcano
- Lagarto - Khaleesi
- Pseudoaleatorio - SimpleRandomBot y FairBot
- Psuedo RPS aleatorio - ConservativeBot
- Psuedo Random LV - Barney Stinson
- Los bots no pueden llamar a servicios de terceros o recursos web (o cualquier otra cosa que disminuya significativamente la velocidad / tiempo de toma de decisiones de los partidos).
CasinoShakespeare
es la única excepción, ya que ese bot se envió antes de que se agregara esta restricción.
Sheldor actualizará esta pregunta tan a menudo como pueda con los resultados del Torneo, a medida que se envíen más bots.
Programa de Orquestación / Control
El programa de orquestación, junto con el código fuente de cada bot, está disponible en github.
https://github.com/eoincampbell/big-bang-game
Detalles de envío
Su envío debe incluir
- El nombre de tu bot
- Tu codigo
- Un comando para
- ejecute su bot desde el shell, por ejemplo
- ruby myBot.rb
- python3 myBot.py
- O
- primero compila tus dos y luego ejecútalo. p.ej
- csc.exe MyBot.cs
- MyBot.exe
Envío de muestras
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]);
}
}
Aclaración
Cualquier pregunta, pregunte en los comentarios a continuación.
fuente
Respuestas:
Pony (Python 2)
Esto se basa en un bot de piedra, papel o tijera que escribí hace algún tiempo para un desafío de programación al final de una clase en línea de Udacity . Lo cambié para incluir Spock y lagarto e hice algunas mejoras.
El programa tiene 11 estrategias simples diferentes, cada una con 5 variantes. Elige entre estos en función de qué tan bien se habrían desempeñado en las últimas rondas.
Eliminé una estrategia alternativa que solo jugó al azar contra oponentes más fuertes. Supongo que es más divertido así.
Correr como:
Editar : hice un pequeño cambio al poner un sesgo hacia la estrategia más simple (es decir, siempre jugar el mismo movimiento) en casos inseguros. Esto ayuda un poco a no tratar de encontrar patrones demasiado complicados donde no los hay, por ejemplo, en bots como ConservativeBot.
Nota : Traté de explicar la estrategia básica de coincidencia de historial que este bot usa en la publicación para mi otro bot Dienstag .
fuente
Markov, Ruby
Mira los últimos dos movimientos del oponente y determina los posibles (y más probables) seguimientos. Si la combinación no se ha elegido antes, solo usa todos los movimientos del oponente (hasta ahora) en su lugar. Luego recoge todas las respuestas posibles para estas y elige una aleatoria.
Corre como
fuente
ConservadorBot, Ruby
Las cosas nuevas son malas.
Corre como
fuente
Fan de Star Wars - Ruby
Jódete Spock
Ejecútalo como:
fuente
Barney Stinson - Lua
Solo tengo una regla: lo nuevo siempre es mejor. Al diablo con el viejo Jo Ken Po o como se llame.
Ejecútalo como:
fuente
Bot aburrido (Java)
Asume que todos siempre juegan lo mismo y planea en consecuencia. Sin embargo, por lo general, escoge rocas atadas porque todos los demás tienen razón
fuente
max
Polvo de iocaína, rubí
Basado en (descaradamente robado) la estrategia RPS aquí . El aspecto del bot elige una conjetura idéntica al bot de Markov, pero luego asume que el oponente ha adivinado lo que va a elegir, y elige un movimiento para vencer a ese en consecuencia.
Tenga en cuenta que acabo de adaptar la idea básica de la estrategia vinculada, no la seguí en detalle.
Corre como
fuente
HuddleWolfTheConqueror - C #
HuddleWolf está de vuelta y mejor que nunca. Él vencerá a Sheldor el Conquistador en su propio juego tonto. HuddleWolf es lo suficientemente inteligente como para identificar y contrarrestar robots de spam. Para oponentes más inteligentes, HuddleWolf usa su conocimiento de estadísticas básicas de 5º grado y utiliza una tirada de dados ponderada basada en el historial de jugadas de la oposición.
fuente
Prueba para niños pequeños
Este bot bastante estúpido asume que está jugando a un niño pequeño que "perseguirá" sus movimientos, siempre tratando de vencer lo que se lanzó por última vez. Si el bot es golpeado varias veces seguidas, salta a un nuevo punto en el patrón. Se basa en mi estrategia para siempre vencer a mi hermano mucho más joven. :)
EDITAR :: Cambió la duración de una racha de pérdida requerida para saltar en lanzamientos aleatorios. También se solucionó un error importante con el salto aleatorio.
Guardar como
ToddlerProof.java
, compilar, luego ejecutar conjava ToddlerProof [me] [them]
fuente
Bart Simpson
"¡Buena roca vieja! ¡Nada supera a la roca!"
Correr como
Lisa Simpson
"Pobre, predecible Bart. Siempre elige el rock".
Correr como
Mejor Lisa Simpson
Me sentí mal por hacer que Lisa fuera tan estúpida, así que le permití elegir al azar entre cualquiera de las manos que vencerían al rock. Todavía estúpida, pero ella es una Simpson después de todo. Tal vez un crayón se atascó en su cerebro?
Correr como
fuente
Eco
Escrito en C #. Compilar con
csc Echo.cs
. Corre comoEcho.exe ARG1 ARG2
.La primera ejecución, Echo toma una opción aleatoria. Cada carrera después de la primera, Echo simplemente repite la última acción del oponente.
fuente
Vulcan, Ruby
Mis dedos están pegados.
Corre como
(Creo que esta es la única estrategia en personaje para su configuración de fondo).
fuente
Tyrannosaurus, Godzilla, Barney ... Regla de los lagartos. De vez en cuando se meten en problemas y necesitan llamar a Spock o tirar rocas
fuente
BayesianBot, Perl (¡ahora v2!)
Por encima de todo lo demás, este es un programa único. En él, verás la brillante fusión de estadísticas y la horrible forma de programación. Además, este bot probablemente rompe muchas reglas de estadísticas bayesianas, pero el nombre suena mejor.
La esencia central de este bot es su creación de 250 modelos predictivos diferentes. Cada modelo toma la forma de "Dado que jugué piedra el último turno y mi oponente jugó tijeras hace dos turnos, esta es la distribución de probabilidad para el próximo movimiento de mi oponente".Cada distribución de probabilidad toma la forma de una distribución de Dirichlet multidimensional.
Cada turno, las predicciones de todos los modelos aplicables (generalmente 10) se multiplican para formar una predicción general, que luego se utiliza para determinar qué movimientos tienen el mayor rendimiento esperado.
Edición 1: en esta versión, cambié la distribución anterior e hice que el bot fuera más aleatorio cuando está perdiendo.
Hay algunas cosas que pueden estar sujetas a mejoras, como el número de modelos (250 es solo un número de 3 dígitos), la elección de la distribución previa (actualmente Dir (3,3,3,3,3)) y El método de fusionar las predicciones. Además, nunca me molesté en normalizar ninguna de las distribuciones de probabilidad, lo cual está bien por ahora porque las estoy multiplicando.
No tengo expectativas muy altas, pero espero que este bot pueda hacerlo bien.
He estado ejecutando este programa así:
fuente
DynamicBot
El bot dinámico casi siempre está cambiando. Realmente odia repetirse
Lenguaje: Python 3.4.1
Comando:
python dynamicbot.py <history>
opython3 dynamicbot.py <history>
dependiendo de su sistemafuente
SmartBot - Java
¡Mi primera entrada para algo en este sitio!
Aunque no es un nombre muy creativo ...
SmartBot encuentra secuencias de movimientos donde los movimientos del oponente y / o de sí mismo son similares a los movimientos realizados por última vez y planifica en consecuencia.
name = SmartBot
Creo ejecutarlo, corregirme si me equivoco.
java -jar SmartBot.jar
Asigna una puntuación para cada posible próximo movimiento por la cantidad de veces que han ocurrido patrones similares.
Favorece ligeramente lagarto.
fuente
java ABot
debería funcionar (recuerde nombrar el archivo igual que la clase pública)SpockOrRock - PHP
Cuando se juega en el mundo real, la mayoría de las personas instintivamente escogen tijeras. Este bot elige Spock o Rock para vencer al jugador promedio. No le molestan las rondas anteriores.
corre con
php spockorrock.php
fuente
SlowLizard, Ruby
Después de comenzar con Lizard, siempre elige un movimiento aleatorio que supera el movimiento anterior del oponente.
Corre como
fuente
LexicographicBot
A este bot le gusta ordenar sus letras, por lo que elegirá una respuesta que sea 1 mayor que la que le dio su oponente en la ronda anterior; a menos que el oponente haya elegido Vulcan, entonces elige una respuesta al azar.
Esto espera que la mano del oponente se reparta en segundo lugar:
fuente
Werevulcan - Ruby
Correr como
ruby werevulcan.rb
El hombre se ve normal durante el día, pero cuando sale la luna, sus orejas se vuelven puntiagudas y sus movimientos se vuelven más lógicos.
fuente
Analizador - Ruby
Corre con
ruby analogizer.rb
. He hecho una corrección lógica al código, pero no tengo idea de por qué hubo errores con esto.Asume que el bot contrario siempre está reaccionando a mi movimiento anterior, y ya sea eligiendo algo que lo venza, algo que lo pierda, o el mismo movimiento, posiblemente de un conjunto restringido de movimientos posibles. Luego escoge el mejor movimiento dado ese supuesto.
Excepto que los primeros diez movimientos están codificados: primero pretendo que solo conozco lagarto, luego asumo que mi oponente siempre lanza algo para vencer lo último que lancé hasta que tenga suficientes datos para un análisis adecuado.
fuente
Java - SelfLoathingBot
Bot comienza al azar, luego ~ 33% para ir al azar, o ~ 33% para jugar una táctica ganadora contra cualquiera de las jugadas inmediatamente anteriores, con un 50% de elección de táctica ganadora.
fuente
El analista
El analista analiza algunas cosas y hace algunas cosas para intentar vencerlo.
compilar
javac Analyst.java
y ejecutar comojava Analyst
fuente
El jugador - Python 2
Contrariamente al nombre, la única aleatoriedad de tiempo que se usa en este programa es en la primera ronda, cuando no hay información. En cambio, lleva el nombre de la falacia del jugador, la creencia de que si un evento aleatorio ha sucedido con menos frecuencia en el pasado, es más probable que ocurra en el futuro. Por ejemplo, si lanzas una moneda justa 20 veces, y las primeras 15 son caras, la falacia del jugador establece que las probabilidades de que las tiras restantes sean colas aumentan. Por supuesto, esto no es cierto; Independientemente de los lanzamientos anteriores, las probabilidades de una moneda justa de salir de colas siempre son del 50%.
Este programa analiza la historia del oponente, encuentra los 2 movimientos que menos ha usado hasta ahora y asume que el movimiento del oponente esta vez será uno de esos dos. Asignando 2 a una victoria, 1 a un empate y 0 a una pérdida, encuentra el movimiento con el puntaje máximo en contra de estos dos movimientos predichos y lanza eso.
El hermano del jugador - Python 2
Al cambiar el
MODE
variable a 0, este programa funcionará en función de una falacia relacionada, también conocida a veces como falacia del jugador. Establece que si un evento aleatorio ha sucedido con más frecuencia en el pasado, es más probable que ocurra en el futuro. Por ejemplo, si lanzas una moneda 20 veces y las primeras 15 son caras, esta falacia indica que las tiradas restantes tienen más probabilidades de ser caras, ya que actualmente hay una racha. En el modo 0, este programa funciona de la misma manera, excepto que supone que el oponente lanzará uno de los dos movimientos que ha lanzado con mayor frecuencia hasta el momento.Entonces sí, estos dos programas están separados por un solo personaje. :)
fuente
Dienstag (Python 2)
A mi primera entrada, Pony parece irle bastante bien con todas sus segundas suposiciones (triples conjeturas, ...) y meta razonamiento. ¿Pero es eso incluso necesario?
Entonces, aquí está Dienstag, el pequeño amigo de Pony, con solo una de las 55 estrategias: predecir el próximo movimiento del oponente y vencerlo.
A la larga, Dienstag gana o empata con cada Bot entre los diez primeros de la clasificación actual. Excepto por Pony que es.
Correr como:
Admito que el código está un poco ofuscado. Si alguien quisiera saber más al respecto, podría agregar explicaciones.
Editar: Aquí hay un
breveejemplo para explicar la idea:El programa obtiene la historia propia y los movimientos del oponente:
sys.arg[1] = 'LLVLLVL', sys.arg[2] = 'RPSPSSP'
El historial se combina en una lista de pares y los movimientos se traducen a números (R = 0, ...):
hist = [[4, 0], [4, 1], [3, 2], [4, 1], [4, 2], [3, 2], [4, 1]]
Se determina el número de rondas jugadas hasta el momento:
N = 7
La idea básica ahora es buscar la cadena ininterrumpida más larga de exactamente los últimos movimientos en la historia anterior. El programa realiza un seguimiento de dónde termina dicha cadena en la lista
cand
(para 'candidatos'). Al principio, sin verificar, se considera cada posición en el historial, excepto la última:cand = [0, 1, 2, 3, 4, 5]
Ahora la longitud de las posibles cadenas aumenta paso a paso. Para la longitud de la cadena
l = 1
, busca ocurrencias anteriores del último par de movimientos[4, 1]
. Esto se puede encontrar en la posición de historia1
y3
. Solo estos se mantienen en lacand
lista:cand = [1, 3]
A continuación, para
l = 2
comprobar cuál de los posibles candidatos fue precedido por el penúltimo par de movimientos[3, 2]
. Este es solo el caso de la posición3
:cand = [3]
Para
l = 3
y más no hay cadenas anteriores de esa longitud ycand
estarían vacías. En este casocand
se guarda el último elemento de :cand = [3]
El bot ahora supone que la historia se repetirá. La última vez que
[3, 2], [4, 1]
ocurrió el caín , fue seguido por[4, 2]
. Entonces, el oponente jugó2
(tijeras) que puede ser golpeado por(2+1)%5 = 3
(Spock) o(2+3)%5 = 0
(piedra). El bot responde, con la primera o segunda alternativa dependiendo de siN
es impar o incluso para introducir alguna variación.Aquí
3
se elige el movimiento que luego se traduce de nuevo:print 'V'
Nota: Dienstag tiene una complejidad de tiempo O ( N 2 ) para devolver el siguiente movimiento después de N rondas. Pony tiene complejidad de tiempo O ( N 3 ). Entonces, en este aspecto, probablemente sean mucho peores que la mayoría de las otras entradas.
fuente
Bash Rocks
¿Cygwin es demasiado pedir como tiempo de ejecución?
bashrocks.sh:
y ejecutarlo así:
fuente
R
. ;)dos2unix
en Cygwin antes de ejecutarlo?Algoritmo
Un algoritmo en aras de tener uno.
Porque siempre se siente más seguro hacer algo, cuanto más complicado, mejor.
Todavía no he hecho algunas matemáticas serias, por lo que este algoritmo puede no ser tan efectivo.
Programa Python 2:
python algorithm.py
fuente
FairBot, Ruby
Comencemos simple.
Corre como
fuente
ViolentoBot
Este bot elige la opción más violenta según la elección previa de los oponentes:
Correr como
fuente
Haskell - MonadBot
No sé si ghc se considera "dentro de lo razonable", pero supongamos que lo es. La estrategia de este bot es contrarrestar el movimiento más popular de su oponente.
Código:
fuente