Encuentra el resultado de un juego de guerra
Cuando estaba en la escuela primaria, había un juego al estilo "Piedra-Papel-Tijera" que jugábamos durante las asambleas, cuando esperábamos a nuestro maestro, en el recreo, etc. Lo llamamos "Guerra". Sin embargo, después de buscar un poco, resulta que esta es una variante mucho más simple del "Juego de escopeta" (según WikiHow) . Voy a llamarlo "Guerra" ya que las reglas son ligeramente diferentes:
2 personas se sientan una frente a la otra. El objetivo del juego es "matar" al otro jugador. Cada turno, puedes jugar uno de 3 movimientos:
Recargar : tienes una pistola que tiene un solo disparo. Debe recargarse antes de poder dispararse cada vez. Recargar cuando ya tienes munición es legal, pero no hace nada. Una recarga se simbolizó tocando las sienes con ambas manos. Cada jugador comienza con 0 municiones.
Guardia : el único movimiento seguro. Si te disparan mientras vigilas, no mueres. La protección se simboliza cruzando los brazos sobre el pecho.
Fuego : dispara tu arma. Para disparar con éxito, debe haber recargado desde el último disparo. Si tu oponente está recargando, tú ganas. Si también disparan, y ambos tienen munición, es un empate. Si están vigilando, desperdiciaste la munición. Si bien disparar sin munición es un movimiento legal, no hace nada y te deja vulnerable como recargar. Disparar se simboliza señalando al otro jugador.
Se jugó de manera similar a RPS, ya que cada jugador lanza simultáneamente su elección (golpeamos nuestras piernas dos veces entre turnos para mantener el ritmo entre ellos, pero eso no es importante para el desafío).
El reto:
Tu tarea es encontrar el resultado de un juego de guerra. Puede ser una función o un programa completo.
Entrada
La opción que cada jugador eligió en cada turno estará representada por un personaje / cadena:
r : recargar
g : guardia
f : fuego
La entrada será una lista de pares, una cadena delimitada / no delimitada, o cualquier otra cosa a lo largo de estas líneas.
Un ejemplo de entrada en Python podría ser [("r", "g"), ("f", "r")]
, es decir, en el primer turno, el primer jugador volvió a cargar y el segundo jugador guardó. En el segundo turno, el primer jugador dispara, mientras que el segundo jugador se recarga. El jugador uno gana este juego. La misma entrada opcionalmente podría ser representado como "r g f r"
, "rgfr"
, "rg fr"
"rg-fr"
...
Puede asumir lo siguiente:
La entrada coincidirá con el formato elegido y solo contendrá caracteres válidos.
Alguien morirá en 100 turnos.
Sin embargo, no puede suponer que los turnos terminan cuando alguien muere.
Salida
Un valor que indica quién ganó (o quién ganó primero *
). Puede elegir qué generar para cada escenario, pero debe tener en cuenta lo siguiente:
El jugador 1 gana
El jugador 2 gana
Se matan unos a otros (dibujar)
Cada resultado debe tener un valor de distrito y siempre debe ser el mismo para cada escenario.
Como ejemplo: podría salir 1
cuando el jugador 1 gana, 2
cuando el jugador 2 gana y 0
en caso de empate. Luego, siempre debe salir 1
cuando el jugador 1 gana, 2
cuando el jugador 2 gana y 0
en caso de empate.
Se puede devolver o imprimir en la salida estándar. El espacio en blanco al final está bien.
Para que quede claro, el único escenario que conduce a un empate es si ambos jugadores disparan y ambos tienen munición.
*
Dado que en este desafío, los turnos pueden continuar después de que alguien muere, es posible que más de 1 jugador gane eventualmente. Debes encontrar quién ganó primero según la entrada.
Casos de prueba (suponiendo 1
que P1 gana, 2
cuando P2 gana y 0
para un empate):
"rg fr" => 1 (P1 shot P2 while they were reloading)
"rg ff" => 1 (They both shot, but only P1 had ammo)
"rr ff" => 0 (Both had ammo and shot each other)
"rr ff rr fg" => 0 (Both had ammo and shot each other. Everything after the first win is ignored)
"rr fg rf" => 2 (P2 shot P1 while they were reloading)
"rf gg rr fg rr fr" => 1
(P2 tried to shoot but didn't have any ammo, then they both guarded, then they both reloaded, then P2 blocked a shot, then they both reloaded again [but P2 still only has 1 ammo!], then P1 shoots P2 while they're reloading.
"rr gf fr rf gg rg ff" => 1
^ Player 1 wins here. The rest to the right has no effect on the output
Este es el código de golf, por lo que gana el menor número de bytes.
Tenga en cuenta que, como muestran los casos de prueba, debe manejar movimientos "tontos". Es perfectamente válido para un jugador intentar disparar cuando no tiene munición, o recargar 2 turnos seguidos (y solo acumular una sola munición).
{"rff","rgf"}
?