Aviso: este desafío del rey de la colina se ha completado. Esto significa que la marca de verificación verde, que se ha otorgado a C5H8NNaO4 por su entrada, The Observer no se moverá a ninguna nueva respuesta.
Aún puede enviar nuevas entradas, pero puede haber retrasos en los nuevos torneos que se ejecutan ya que ya no estoy buscando activamente nuevas entradas.
Introducción
En este desafío, estás jugando un juego de arcade titulado The Ultimate Samurai Showdown Ultimate Edition Special Version 2.0 X Alpha Omega Turbo (o simplemente Ultimate Samurai Showdown para abreviar). ¿Tus oponentes? ¡Nada menos que los otros miembros de Programming Puzzles & Code Golf!
Como es de esperar de un juego arcade PPCG, no juegas Ultimate Samurai Showdown directamente, sino que escribes un programa que jugará el juego por ti. Este programa luchará contra los programas enviados por otros usuarios en duelos uno a uno. El programa más hábil será coronado como el último samurai de PPCG, y se le otorgará la marca verde de la leyenda.
Descripción del juego
Esta sección describe la mecánica detrás del juego.
Condición de victoria
Una partida consta de dos samurai que se enfrentan entre sí. Cada samurai comienza cada partida con 20 puntos de golpe y 1 honor . Un samurai gana si su oponente está muerto y todavía está vivo. Hay dos métodos por los cuales un samurai puede morir:
- Si los puntos de golpe de un samurai se reducen a 0, morirá.
- Si un samurai trae su propio honor por debajo de 0, será derrotado por los dioses por actuar deshonrosamente en un duelo.
Ser derrotado por los dioses tiene mayor prioridad que reducir los puntos de golpe a 0, por lo que en una situación en la que un samurai tiene 0 puntos de vida y el otro tiene -1 honor, el samurai con 0 puntos de vida ganará. En una situación en la que ambos samurai tienen -1 honor, ambos son derrotados por los dioses y el juego es un empate.
Una partida consta de hasta 500 turnos . Si pasan los 500 turnos y la partida no se ha decidido (ninguno de los samuráis ha muerto), los dioses se aburren y derriban a los dos samuráis, lo que resulta en un empate.
Comportamiento
En cada turno, el samurai debe realizar exactamente una de las siguientes acciones:
W
El samurai esperará y no realizará ninguna acción. Esto lo hace ver genial, pero no lo ayuda a derrotar a su oponente. Esta es también la acción predeterminada.
B
El samurai se inclinará ante su oponente de manera honorable. Esto agrada a los dioses y, por lo tanto, el samurai ganará 1 Honor. El honor es vital para el éxito de tu samurai porque el honor es esencialmente el "recurso" para este juego: todos se separan B
y W
pueden disminuir el honor. Además, si un samurai gana 7 de Honor o más, se le otorga el uso de la Espada de los Dioses . Las implicaciones de esto se describen a continuación.
Sin embargo, inclinarse ante su oponente lo deja abierto si su oponente decide golpearlo con su espada, así que tenga cuidado cuando elija inclinarse.
G
El samurai entrará en una posición defensiva y protegerá contra cualquier golpe de espada. Este movimiento bloqueará con éxito todos los golpes de espada, incluso los realizados con la Espada de los Dioses .
Sin embargo, los dioses fruncen el ceño ante un samurai demasiado defensivo, por lo que este movimiento consumirá 1 Honor si la acción del samurai en el turno inmediatamente anterior también estaba protegiendo. No consume Honor de otra manera.
I
El samurai intentará golpear a su oponente con una rápida extracción de su espada de su vaina. Si el samurai tiene 7 Honor o más, usará la Espada de los Dioses en lugar de su espada normal. Este movimiento consume 1 Honor.
El empate rápido es un golpe rápido que vencerá a los ataques aéreos más lentos, sin embargo, perderá contra las paradas. Si el golpe se conecta con éxito, causará 1 daño o 2 daños con la Espada de los Dioses .
P
El samurai intentará detener cualquier ataque entrante y luego lanzar su propio ataque. Si el samurai tiene 7 Honor o más, usará la Espada de los Dioses en lugar de su espada normal. Este movimiento consume 1 Honor.
La parada es una buena maniobra contra golpes rápidos, pero será dominada por ataques aéreos más lentos. Si el golpe se conecta con éxito, causará 1 daño o 2 daños con la Espada de los Dioses .
O
El samurai intentará golpear a su oponente con un ataque aéreo más lento. Si el samurai tiene 7 de Honor o más, usará la Espada de los Dioses en lugar de su espada normal. Este movimiento consume 1 honor.
El ataque aéreo puede dominar las paradas, pero perderá contra los ataques rápidos. Si el golpe se conecta con éxito, causará 1 daño o 2 daños con la Espada de los Dioses .
Espada de los dioses
Un samurai con Honor de 7 o más gana la habilidad de usar la Espada de los Dioses . Si su Honor se reduce por debajo de 7, se le revocará la habilidad de usar la Espada de los Dioses . La Espada de los Dioses hace 2 daños en lugar de 1.
La Espada de los Dioses no permite que un golpe derrote un golpe de espada que normalmente no vencería. Por ejemplo, una parada de la Espada de los Dioses seguirá perdiendo en un ataque aéreo ordinario, y una extracción rápida de la Espada de los Dioses no dominará una extracción rápida ordinaria. De hecho, la llamada Espada de los Dioses en realidad no es tan poderosa, tal vez es una broma cósmica interpretada por los dioses ...
Tabla de interacciones
El Fragmento de pila a continuación contiene una tabla que enumera explícitamente todos los resultados posibles de las diferentes combinaciones de acciones que los dos samurais pueden tomar. Para verlo, haga clic en "Mostrar fragmento de código", luego haga clic en "Ejecutar fragmento de código".
Comunicación del programa
Para facilitar la ejecución del torneo, se escribió un programa controlador para desempeñar el papel de los "dioses": mantiene registros de honor y salud y golpea al samurai en consecuencia. Esta sección describe cómo se comunicará su programa con el programa controlador.
Descripción de entrada
El programa controlador llamará a su programa desde la línea de comando de esta manera:
<command> <history> <enemy_history> <your_health> <enemy_health> <your_honour> <enemy_honour>
dónde:
<command>
es el comando requerido para ejecutar su programa. Por ejemplo, si su programa está en un archivosuper_sentai.pl
, el comando probablemente lo estéperl super_sentai.pl
.<history>
es una historia de movimientos que hiciste. Por ejemplo,WWBP
significaría que esperó dos veces, se inclinó una vez y se paró una vez.<enemy_history>
es una historia de movimientos que hizo tu enemigo. Por ejemplo,BBBI
significaría que tu enemigo se inclinó tres veces y realizó un sorteo rápido.<your_health>
es tu salud actual<enemy_health>
es la salud actual del enemigo.<your_honour>
es tu honor actual<enemy_honour>
Es el honor actual del enemigo.
Para el primer turno, el history
y enemy_history
estará vacío, por lo que solo se llamará a su programa con los últimos cuatro argumentos como este:
<command> <your_health> <enemy_health> <your_honour> <enemy_honour>
¡Prepárate para esto!
Los lectores astutos pueden notar que los cuatro argumentos que proporcionan el honor y la salud de ambos samurai son, hasta cierto punto, superfluos; Como este es un juego de información perfecto, el honor y la salud del samurai se pueden determinar utilizando solo las historias.
Estos valores se proporcionan para fines de conveniencia para que no tenga que analizar los argumentos del historial. Esto debería resultar útil para implementar estrategias simples, como no atacar cuando su Honor es 0.
Descripción de salida
Para elegir una acción, su programa debe una salida de W
, B
, G
, I
, P
, o O
en la salida estándar, dependiendo de la acción que desea realizar. Si su programa no genera nada dentro de 1000 ms, se terminará y su programa se tratará como si se emitiera W
.
Si su programa genera más de una letra, solo se considerará la primera letra, por lo que la salida Parry
será lo mismo que la salida P
.
Si la salida de la primera letra de su programa no es ninguna de las opciones enumeradas anteriormente, se establecerá de manera predeterminada W
.
Formato de envío
Envía un programa como respuesta a esta publicación. Puede enviar múltiples programas. Si está enviando múltiples programas simples, le recomiendo enviarlos como una sola respuesta; Si está enviando múltiples programas complejos, le recomiendo enviarlos como respuestas separadas. Una vez que haya agregado con éxito su programa / s al torneo, me comprometeré con el repositorio de git con su entrada (vinculada a continuación).
Si encuentro problemas que impiden que su programa se agregue al torneo, dejaré un comentario en su entrada indicando el problema.
Incluya lo siguiente en su envío:
- El nombre legible por humanos de su programa, para usar en marcadores. Los espacios están permitidos aquí; las comas y los caracteres Unicode no lo son.
- El idioma en el que está escrito su programa. Evite escribir en idiomas extraños y de difícil acceso como TinyMUSH.
- Una breve sinopsis de su programa. Esto puede ser una descripción de cómo funciona el programa, o simplemente un poco de texto de sabor sobre su programa (si quiere ser todo secreto), o tal vez ambos.
- Los comandos requeridos para ejecutar su programa. Por ejemplo, si estaba escribiendo su envío en Java llamado
example.java
, proporcionaría instrucciones de compilación yjavac example.java
luego instrucciones de ejecuciónjava example
. - El código fuente del programa.
Para ayudar en el envío, proporciono una plantilla de envío que se puede encontrar aquí . La plantilla hace que las presentaciones se vean mejor. Recomiendo encarecidamente su uso.
También proporciono dos entradas de ejemplo. Aunque las entradas de ejemplo participarán en el round robin, su propósito principal es aclarar los formatos de presentación y entrada / salida para el torneo, en lugar de ser competidores serios por el título de Ultimate Samurai.
Estructura de torneo
Esta sección describe cómo se realizará el torneo entre los participantes.
Programa de control
El programa de control está escrito en Python 2 y se puede encontrar en el repositorio Ultimate Samurai Showdown Github . Si desea ejecutarlo usted mismo, las instrucciones sobre cómo ejecutarlo se incluyen en el archivo README.md en el enlace. Sin embargo, solo los torneos que se ejecuten en mi computadora serán oficiales para evitar diferencias de hardware que afecten los resultados del torneo.
El programa de control se ejecutará en una computadora portátil con Arch Linux. Tiene un procesador Intel Core i7 y 8GB de RAM. Me esforzaré para que todas las entradas se ejecuten en mi computadora, pero lo agradecería enormemente si evita los idiomas a los que no se puede acceder libremente (como sin costo monetario).
Sistema de puntuación
El sistema de puntuación es un round robin. Cada programa jugará ocho partidos contra cualquier otro programa. Una victoria le otorga al programa 1 punto, una pérdida sin puntos y un empate 0.5 puntos. El programa con la puntuación más alta gana el juego. Si hay un empate, competiré entre los dos mejores programas para determinar el ganador.
El número de veces que cada programa se reproducirá entre sí puede reducirse de 8 si hay un número extremadamente grande de participantes. Agregaré una nota aquí si esto ocurre.
Ejecutaré el round robin muchas veces a medida que se publiquen nuevos envíos, pero solo contará el round robin más reciente.
Descalificaciones
Es posible que su programa sea descalificado del torneo. La descalificación puede ocurrir si:
- Su programa no se compila ni se ejecuta;
- Su programa es un duplicado estratégico de otro programa (es decir, implementa exactamente la misma estrategia que otro programa);
- Su programa intenta sabotear otros programas modificando el código del controlador, el código de otro programa, etc.
- Su programa intenta explotar un error en el código del controlador. En lugar de explotar errores, debería abrir un problema en el repositorio de git, hacer un comentario aquí o hacerme ping en el chat.
Resultados pasados
Los resultados detallados de todos los torneos están disponibles en la página wiki .
El torneo más reciente se completó el 2015-07-17 07:20. Aquí hay un resumen de los resultados:
The Observer: 209.0
Coward: 203.0
Monk: 173.0
Elephant Warrior: 157.0
Iniqy: 157.0
Agent 38: 144.0
Ninja: 138.0
Meiyo Senshi: 138.0
Kakashi: 136.0
Yoshimitsu: 131.0
Hermurai: 121.0
Warrior Princess: 120.0
Gargoyle: 119.5
The Honourable: 119.0
Hebi: 118.5
Predictor: 116.0
Whack-a-mole: 107.0
The Fool: 106.0
The Prophet: 105.0
Copy-san: 97.0
YAGMCSE: 80.0
The Waiter: 66.0
Swordsman: 43.0
Spork Holder: 32.5
Blessed Samurai: 27.5
Attacker: 27.0
The Terminator: 17.0
Master Yi: 16.0
fuente
Respuestas:
El monje (Java)
El monje valora el honor y alaba las bendiciones de los dioses. Siendo entrenado en paciencia, calmadamente envía sus oraciones al cielo hasta que se siente favorecido por Dios.
Disfrutando de su vida, trata de protegerla. Cuando pierde salud por encima de cierto ritmo, se defiende lo mejor que puede.
Esperando el apoyo de sus dioses, envía al azar eyaculaciones [1] al cielo, de lo contrario, lucha lo mejor que puede.
Si su oponente está agotado de la batalla, lo termina usando su honor restante para otorgarle una muerte rápida e indolora.
Compilar / Ejecutar
El ninja (Java)
El Ninja es rápido y ataca aún más rápido. Ataca inmediatamente después de un saludo formal amistoso, confundiendo aún más a su enemigo al inclinarse antes y después de cada ataque.
Al ser bendecido, el ninja mantiene este comportamiento, esperando que su oponente haga su primer movimiento (s). Aprovechando esta oportunidad, desata una serie de explosiones, bendecidas por la Diosa ninja hasta que esté demasiado cansado de la batalla. Usando su honor restante, se esconde debajo de las hojas debajo, protegiéndose del próximo ataque. Salta y ataca a su enemigo desde atrás, ocultándose lo más rápido de nuevo.
Si recibe una herida fatal, se esfuerza por llevarse la vida de su oponente con él, por supuesto, manteniendo un mínimo de honor.
Kakashi, el ninja imitador (Java)
Kakashi copia los movimientos de sus oponentes eligiendo aleatoriamente entre los dos últimos movimientos realizados por el oponente. Si el oponente espera, se inclina: también mantiene su honor.
Desearía que Kakashi pudiera ser bendecido con el Sharingan ... Pensé en leer el cast.txt. Simula cada ronda de su historia contra todos los oponentes allí. Intenta averiguar contra qué oponente está luchando comparando la historia de enemigos simulados con la historia de enemigos reales. Luego usa esa información para predecir el próximo movimiento que haría el oponente y elige el mejor contramovimiento de una lista predefinida. Pero siento que esto podría tomar un poco ya que tengo Internet súper lento en este momento y casi no tengo habilidades Java
El observador, (node.js)
El Observador se inclina antes de intentar predecir el próximo movimiento del oponente de sus últimos 5 movimientos, eligiendo la mejor contraparte para el movimiento predicho.
Editar: ¡Gracias a @apsillers por compartir el boilerplate de node.js !.
Editar: Tuve una falla importante en el observador, en realidad no sé lo que pensé ayer por la noche. Parece que solo miró los dos últimos movimientos del enemigo. Lo hizo sorprendentemente bien así.
Su memoria ahora es consultada por la parte más larga (final) de la historia de los enemigos que ya ha visto. Contiene una matriz con todos los movimientos que siguieron el historial de movimientos. Uno es seleccionado al azar. Entonces, si un movimiento se sigue con más frecuencia, también es más probable que se elija. Algo así como cadenas de markov.
The Observer, ahora también guardias.
[1]: TIL: la eyaculación tiene un significado religioso
fuente
Meiyo Senshi (Java)
Proveniente del área de Haijima, no se sabe mucho sobre el Meiyo. Normalmente no participan en juegos deportivos, pero han enviado un guerrero a este para evaluar a sus rivales.
Sin embargo, son un grupo honorable, por lo que puede estar seguro de que hará que su presencia sea conocida por los dioses en poco tiempo. Una vez que haya visto a su enemigo lo suficiente como para informar, usará las bendiciones recibidas para golpear a su oponente.
Para compilar run, es la forma estándar de Java:
fuente
Spork Holder (Ruby)
Spork Holder se inclina en el primer turno, luego actúa al azar después. Es una de las dos entradas de ejemplo.
Mando:
ruby spork-holder.rb
El camarero (bash)
El camarero solo espera en cada turno. Es una de las dos entradas de ejemplo.
Mando:
echo W
No se requiere código fuente.
fuente
Cobarde (Node.js)
BXBXBX
/BBB
patrones para inclinarse (o golpearte) cuando te inclinas.GXGXGX
patrones para inclinarse cuando estás vigilando.Si desea escribir un envío de Node.js , no dude en usar mi código repetitivo; todo hasta una
decide
función incluida es totalmente general y gratuito.fuente
Whack-a-mole (R)
Ataca cuando es probable que el enemigo se doble, de lo contrario los guardias
Ejecutar usando
Rscript Whack-a-mole.R
.fuente
Guerrero Elefante (Java)
El Elephant Warrior es de una época más antigua y natural. Ha visto mucho y recuerda todo. Él se gana el favor de los dioses mientras examina a su oponente, y luego, una vez que los toma en su corazón, los separa.
Compilar:
javac ElephantWarrior.java
Comando:
java ElephantWarrior
fuente
args
.Princesa Guerrera (Julia)
Este es el primer desafío de King of the Hill en el que he competido. Veamos cómo va esto.
La Princesa Guerrera prioriza el ataque y el honor, y recurre a la autoconservación cuando es necesario. Ella está bastante ansiosa y nunca espera. En un esfuerzo por mantenerse ágil, ella tampoco usa un ataque aéreo.
Guardar como
warrior-princess.jl
y ejecutar desde la línea de comandos de esta manera:Si no tienes a Julia, puedes descargarla aquí . Para evitar problemas, se recomienda la última versión estable (es decir, no la versión de desarrollo).
fuente
Gárgola (Java)
Intenta usar el movimiento defensivo sin consumir honor.
Como es una entrada de Java:
fuente
Espadachín (C / Java)
El espadachín se inclina en el primer turno y cada vez que se está quedando sin honor. Luego verifica si el oponente no se había inclinado, defendido o esperado en el turno anterior. Si el oponente no lo hubiera hecho, existe una gran probabilidad de que haga uno de estos en el turno actual y, por lo tanto, el espadachín golpea al oponente al azar. Si esto no es cierto, defiende si no ha defendido el turno anterior. Si lo hubiera hecho, se inclina para ganar honor.
Versión C:
Instale GCC (compilador) y guarde el código en un archivo llamado comando " Swordsman.c " para compilar:
Se creará un ejecutable llamado " Swordsman ". Ejecutar usando
Versión de Java:
Instale javac (compilador) y guarde el código en un archivo llamado comando " Swordsman.java " para compilar:
Archivo de clase llamado "Se creará un Swordsman.class ". Ejecutar usando
Atacante (Java)
Al atacante no le importa nada, excepto que quiere que su oponente esté muerto. Al azar golpea uno de los movimientos de ataque y si tiene poco honor, se inclina.
Instale javac (compilador) y guarde el código en un archivo llamado " comando Attacker.java " para compilar:
Se creará un archivo de clase llamado " Attacker.class ". Ejecutar usando
Vaticinador (C / Java)
Predictor predice los movimientos de los enemigos. En el primer turno, usa un movimiento aleatorio. Se inclina si su honor es bajo, ataca si el honor de los enemigos es bajo o se ha inclinado en el turno anterior. Si el predictor no ha protegido el turno anterior, los guardias en el turno actual. De lo contrario, realiza el mismo movimiento que el enemigo en el turno anterior, siempre que no sea
'W'
así, Predictor se inclina.Versión C:
Instale GCC (compilador) y guarde el código en un archivo llamado comando " Predictor.c " para compilar:
Se creará el ejecutable llamado " Predictor ". Ejecutar usando
Versión de Java:
Instale javac (compilador) y guarde el código en un archivo llamado comando " Predicator.java " para compilar:
Se creará un archivo de clase llamado " Predicator.class ". Ejecutar usando
No estoy seguro de cuán efectivos serán estos bots, ya que no tengo el intérprete de python2 para probarlo.
fuente
ArrayIndexOutOfBoundsException
primer turno, haciendo que espere en el primer turno. Aparte de eso está funcionando.segmentation fault (core dumped)
Maestro Yi (Python)
El maestro asesino gana mucho favor al principio del juego, construyéndolo hasta que sea invencible. Intenta atacar cuando menos lo esperan.
Para ejecutar: Guardar como
MasterYi.py
fuente
Copy-san (C)
Copia cada movimiento de su oponente. Estoy bastante seguro de que está garantizado para perder. Compilar:
gcc copy-san.c
fuente
Hebi (Java)
Hebi sigue el camino de la serpiente.
La serpiente no necesita la bendición de los dioses.
La serpiente desliza sus golpes; Como las olas en la playa, lo que entra retrocede por donde vino.
La serpiente nunca espera.
La serpiente no tiene sentido de aptitud, de lo contrario, habría sido escrita en Python.
Instrucciones de ejecución:
Cuerpo del código:
fuente
El Honorable (Java)
Los honorables valores honran sobre todo. Es decir, su honor por encima de todos los demás. Si el samurai enemigo tiene mayor o igual honor, se inclina. Ninguno será más honorable que él. De lo contrario, hace un movimiento aleatorio. Nunca guarda dos veces seguidas, ¡eso sería deshonroso!
compilar:
Fuente:
fuente
Bendito Samurai (Python)
Este Samurai trata de mantener el favor de los dioses por el mayor tiempo posible. Se apresura a obtener la espada sagrada, luego alterna entre Guardia y Ataque con uno de los golpes, reabasteciendo el honor cuando sea necesario. Si parece que él o su oponente pueden caer pronto, se apresura a matar. Fácilmente caerá ante un oponente que puede seguir su patrón, pero su estrategia de atacar siempre con dos daños debería ser bastante efectiva.
Para ejecutar:
Guardar como BlessedSamurai.py
fuente
last
aself.last
lo que parece solucionar el problema.Hermurai (C ++)
Admira a su oponente y es un poco paranoico. Quiere saber si puede hacer lo que otros samurais pueden hacer, porque todavía no puede creer que sea un samurai. Su sueño incesante se hizo realidad antes de que él lo supiera. Lo que podría costarle la cabeza ...
Iniqy (C ++)
Golpea lo más fuerte posible. Entra en modo de ataque imparable cuando está en peligro.
Ambos están escritos en C ++. Compilar:
Para ejecutar en Linux:
./iniqy
Para ejecutar en Windows:
iniqy.exe
fuente
El terminador (rubí)
El Terminator no presta atención a su propia salud. El Terminator no tiene noción de honor. El Terminator se envía desde el futuro y simplemente está decidido a terminar con su oponente. Lo hace observando los movimientos de sus oponentes, y nada más. Muestra los movimientos y calcula la respuesta apropiada de una manera tan compleja que ninguna tecnología actual puede predecir las acciones de Terminator. De hecho, para cualquiera que viva en 2015, Terminator puede parecer algo aleatorio ...
fuente
Agente 38 [1] (C)
Como producto de una extensa manipulación genética, el Agente 38 tiene el físico y la agudeza mental de un super [2] -samurai, y es definitivamente superior a todo su desamparo. [necesitaba citación] viciado [cita requerida] competidores.
[1] Número completamente irrelevante [2] Garantizado para ser verdad el 1% del tiempo
YAGMCSE
Los métodos de Monte Carlo parecen exhibir un juego decente, así que aquí hay otra entrada de simulación genérica de Monte Carlo.
A diferencia de la mayoría de las otras entradas en este concurso, esta entrada usa una gran cantidad de simulaciones de juegos aleatorios, y por lo tanto requiere el uso de la bandera -O3 para un rendimiento óptimo.
Compile el programa con el comando: gcc monte.c -o monte -O3 -std = c99
fuente
GBWWWWW...
oBWWWW
Después de mi intento fallido de ingresar a Target Dummy, te presento mi próximo bot ...
ScroogeBot - Python 2
Este bot se inclinará si tiene un honor. De lo contrario, lanzará una moneda.
Si cae en la cabeza, realizará un ataque aleatorio. Si cae sobre las colas, se inclinará o protegerá.
Mando:
python scroogebot.py
fuente
Yoshimitsu (JS)
Los intentos de no protegerse al verificar los dos últimos movimientos, obtendrán valentía con mayor honor. basado en la plantilla de los apsillers realizados
fuente
El tonto (C)
El tonto implora una estrategia bastante errática, nunca repite el mismo movimiento dos veces a menos que sea forzado por falta de honor. Sus movimientos se basan en gran medida en la aleatoriedad, lo que dificulta predecir sus acciones. Su bienestar es lo último en lo que piensa, ya que sus pensamientos se centran solo en el derramamiento de sangre y la victoria final.
El profeta (C)
El Profeta usa el conocimiento de los 2 movimientos anteriores de su oponente para predecir su próximo movimiento y proporciona un contraataque rápido y mortal. Además, hace astrología y otras cosas.
Compilacion
Ambos programas están escritos en C y se pueden compilar con
gcc
:Corriendo
*nada
Ventanas
fuente