Tu tarea es simple: dime quién gana la batalla de las letras.
Las tropas
Hay tres "tropas" diferentes en esta batalla, resumidas en esta tabla.
name | health | damage
A 25 25
B 100 5
C 10 50
Puede usar tres caracteres únicos para representar a las tropas, pero debe especificar si no son estas letras.
La batalla
Supongamos que tenemos una muestra de batalla:
ABC # army 1
CBA # army 2
Cada ejército dispara repetidamente a la unidad situada más a la izquierda, hasta que está muerta; luego se mueven hacia la tropa a la derecha y repiten. Entonces el ejército 2 ataca A
en el ejército 1 hasta que A
esté muerto, luego muévete a B
, entonces C
. El ejército 1 ataca C
primero, luego B
, luego A
. Asuma que los ejércitos atacan al mismo tiempo, y así las tropas siempre dispararán si estaban vivas antes de la ronda y pueden matarse entre sí al mismo tiempo. Disparan en orden de izquierda a derecha.
La batalla se desarrollaría así:
ABC
CBA
BC # A (25 hp) killed by C (-50 hp), B (100 hp) attacked by B (-5 hp) and A (-25 hp), has 70 hp
BA # C (10 hp) killed by A (-25 hp), B (100 hp) attacked by B (-5 hp) and C (-50 hp), has 45 hp
BC # B (70 hp) attacked by B (-5 hp) and A (-25 hp), has 40 hp
A # B (45 hp) killed by B (-5 hp) and C (-50 hp)
BC # B (40 hp) attacked by A (-25 hp), has 15 health
# A (25 hp) killed by B (-5 hp) and C (-50 hp), army 2 dead
¡Por lo tanto, el ejército 1 gana la batalla!
Entrada
Dos cadenas, la primera que representa el ejército 1 y la segunda ejército 2. No son necesariamente del mismo tamaño (porque ¿quién dijo que sería una pelea justa?)
Salida
Cualquiera de los tres valores únicos y constantes para representar el ejército 1 ganador, el ejército 2 ganador o el evento poco probable de un empate. Sí, es posible que las últimas tropas se maten entre sí, terminando en un empate.
Batallas
ABC
CBA
Army 1
CCCCC
CCCCC
Tie
CABCAB
ABBABBA
Army 2
Se aplican lagunas estándar . Debe enviar un programa completo.
Este es el código de golf , la solución más corta gana.
A
latidosB
yC
corbatasB
yA
corbatasC
. Cambiar cualquiera deA
los valores de a20
lo haría empatarB
.Respuestas:
Pyth
14597 bytesUn poco menos ingenuo que antes.
Pruébalo en línea!
Explicaciones:
Cortemos el programa en varias partes.
El diccionario
Y
es:{'A': [25, 25], 'C': [10, 50], 'B': [100, 5]}
. Entonces:En este punto,
K
hay una lista de parejas que representa el primer ejército. Cada par de esta lista es una carta del ejército, y es(health, damage)
para esa carta.J
es exactamente lo mismo, pero para el segundo ejército.g
es una función que toma dos ejércitos y reparte el daño hecho por el segundo ejército al primero. Ahora:Cuando termina el ciclo while,
K
yJ
tienen su valor final. Si ambos están vacíos, es un empate; de lo contrario, el ejército no vacío gana. Eso lo maneja el último código:¡Eso es!
fuente
Haskell ,
199193179176171 bytesPruébalo en línea!
Pequeño truco: divide todas las estadísticas del ejército por 5.
fuente
C #, 446 bytes
Versión formateada:
Salidas 1 si gana ejército1, 2 para ejército2 y 0 para empate
fuente
int[]
que creo que puedes combinarlas, `` <= 0` es lo mismo que<1
seguramente. ¿Necesitas eltry-catch
?Javascript (ES6) -
316269 BytesEstoy seguro de que esto se puede jugar como el infierno, pero esto es lo que se me ocurrió :) ¡Sin embargo, logré reducir 47 bytes!
Salidas 0 para empate, 1 para el equipo 1 y 2 para el equipo 2.
Legible :
Demo :
fuente