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