Construyamos una simulación para un aspecto del juego de cartas, que personalmente conozco por el nombre holandés 'Oorlog' (se traduce como 'Guerra').
¿Cómo funciona 'Oorlog'?
Dos barajas de cartas (cada una con dos comodines) se dividen en partes iguales entre la cantidad de jugadores que juegan. Cada jugador baraja su propio stock, lo pone boca abajo frente a ellos, y todos los jugadores abren la primera carta del stock al mismo tiempo.
El ganador de esa 'batalla' está determinado por los valores de las cartas siguiendo estas reglas: Joker / Ace derrota a King; King derrota a Queen; Queen derrota a Jack; Jack derrota a 10; 10 derrotas 9; .... Además, 2 y 3 derrotan a Ace / Joker. La última regla puede conducir a un ciclo donde 2 o 3 vence a As o Joker, Ace o Joker vence a otra carta, que a su vez vence a 2 o 3. En este caso, el 2 o 3 gana la batalla.
(El traje es irrelevante en este juego de cartas).
Cuando dos o más jugadores tienen las mismas cartas más altas, tienen una 'guerra'. Esto significa que ponen una carta al revés, y luego cada una abre una nueva carta de su stock, nuevamente buscando quién tiene la carta más alta. Esto continúa hasta que un solo jugador gana la batalla completa.
(Todas las cartas de esa batalla van a la pila de descarte del jugador que ganó la batalla. Luego, todos abren una nueva carta. Cuando las existencias de un jugador se quedan sin cartas, dan la vuelta a su pila de descarte y continúan con esta nueva cantidad. Esto continúa hasta que un jugador se quede sin todas sus cartas y luego gane el jugador con la mayor cantidad de cartas).
Ejemplo de 'batallas' con tres jugadores:
- 4, 8, Jack:
Jack gana. - 7, Ace, Reina:
Ace gana. - 10, 10, Rey: el
Rey gana. - 3, Joker, 2:
3 victorias. - Ace, Joker, 2:
2 victorias. - 3, Reina, As:
3 victorias. - Reina, Reina, 9:
Reina y Reina están teniendo una 'guerra', por lo que continúa con dos cartas nuevas: 4, 8;
8 victorias. - 4, 4, 4:
Todos están teniendo una 'guerra', por lo que continúa con tres cartas nuevas: 8, As, 2;
2 victorias. - Jack, 5, Jack:
Jack y Jack están teniendo una 'guerra', por lo que continúa con dos cartas nuevas: 5, 5;
5 y 5 también son iguales, por lo que la 'guerra' continúa nuevamente con dos cartas nuevas: 10, Rey;
El rey gana. - Joker, Joker, Ace:
Todos están teniendo una 'guerra', por lo que continúa con tres cartas nuevas: 9, 7, 9;
9 y 9 también son iguales, por lo que la 'guerra' continúa con dos cartas nuevas: Jack, 3;
Jack gana.
Entonces, sobre el desafío del código:
Entrada:
STDIN con una matriz o una cadena que simula una matriz (su llamada, incluso si su idioma admite matrices). Este conjunto contiene las cartas de una batalla en orden cronológico (ver casos de prueba para una comprensión más clara de esto).
Salida:
STDOUT el índice del jugador que ganó la batalla.
Puede elegir si desea un indexados a cero (es decir 0
, 1
o 2
) o uno indexada salida (es decir 1
, 2
, 3
).
Reglas de desafío:
- La entrada será una sola matriz / cadena que representa una matriz. Por lo tanto, no puede tener una matriz de matrices para simplificarlo. Tampoco puedes tener objetos sustitutos para cartas que no participan en la guerra.
- Usamos anotaciones numéricas para las tarjetas de presentación en lugar de las letras. Entonces Ace / Joker =
1
; Jack =11
; Reina =12
; y rey =13
. - En este desafío, podemos asumir que siempre estamos jugando con 3 jugadores .
- Los tres primeros indican el inicio de la 'batalla'. Cuando dos o más jugadores tienen una 'guerra', las cartas continuas en la matriz indican su batalla (ver casos de prueba para una comprensión más clara de esto).
Reglas generales:
- Esto está etiquetado como code-golf , por lo que la respuesta más corta en bytes gana.
Esto no significa que no deberían ingresar idiomas que no sean de código de golf. Trate de encontrar una respuesta de código de golf lo más breve posible para "cada" lenguaje de programación. - Mencione qué indexación (cero o uno indexado) ha utilizado para la salida.
Casos de prueba:
Test case 1: [4, 8, 11] -> 2 (or 3)
Test case 2: [7, 1, 12] -> 1 (or 2)
Test case 3: [10, 10, 13] -> 2 (or 3)
Test case 4: [3, 1, 2] -> 0 (or 1)
Test case 5: [1, 1, 2] -> 2 (or 3)
Test case 6: [3, 12, 1] -> 0 (or 1)
Test case 7: [12, 12, 9, 4, 8] -> 1 (or 2)
Test case 8: [4, 4, 4, 8, 1, 2] -> 2 (or 3)
Test case 9: [11, 5, 11, 5, 5, 10, 13] -> 2 (or 3)
Test case 10: [1, 1, 1, 9, 7, 9, 11, 3] -> 0 (or 1)
Test case 11: [13, 13, 4, 1, 3] -> 1 (or 2)
Test case 12: [13, 4, 13, 2, 3] -> 2 (or 3)