Objetivo:
Dadas dos criaturas con habilidades de combate opcionales, devuelve valores únicos pero consistentes que representan qué criaturas murieron, si las hay.
Entrada:
#Longest form:
[[P,T, "<abilities>"], [P,T, "<abilities>"]]
#Shortest form:
[[P,T], [P,T]]
Cada criatura se dará en forma de [P,T,"<abilities>"]
. Estará en la forma [P,T]
, [P,T,""]
o [P,T,0]
si no tiene habilidades, su elección en la forma. P es un entero> = 0, T es un entero> = 1. <abilities>
es un subconjunto de "DFI"
, o puede representarse a través de un solo número / cadena de bits si lo desea. El orden de las banderas también depende de usted.
Mecánica de combate:
Cada criatura tiene dos estadísticas, Poder y Resistencia en ese orden, y habilidades opcionales. El poder de una criatura es> = 0. La resistencia de una criatura es> = 1.
Cada criatura hará simultáneamente daño igual a su poder a la criatura oponente (a menos que uno tenga el primer golpe). Si el valor es mayor o igual que la resistencia del oponente, morirá (a menos que sea indestructible).
Ejemplo: Alice es un 2/2
, Bob es un 3/4
, ambos sin habilidades. Alice hará 2 daños a Bob y recibirá 3 daños a cambio. La dureza de Alice es 2, por lo que morirá, la dureza de Bob es 4, por lo que vivirá.
Solo hay 3 habilidades opcionales que consideraremos para esto (aunque hay más en el juego). Estas serán banderas de un personaje:
- [D] eathtouch: cualquier cantidad de daño (X> 0) se considera letal.
- [F] primer Golpe: Primero hará daño, capaz de matar a la otra criatura antes de que pueda atacar. Si ambas criaturas tienen First Strike, resuelve el combate como de costumbre.
- [I] ndestructible: Ninguna cantidad de daño se considera letal, incluido Deathtouch.
Salida:
Cualquier valor consistente para cada uno de los siguientes cuatro casos. Indique los cuatro valores en su respuesta, por favor. Ejemplo de valor de retorno en parens:
- Ninguna criatura murió (0)
- La primera criatura murió (1)
- La segunda criatura murió (2)
- Ambas criaturas murieron (3)
Reglas:
- Se garantiza que la entrada tiene dos criaturas formateadas correctamente.
- Si está usando personajes para habilidades, puede suponer que están ordenados como desee, pero publique el orden utilizado si es relevante.
- Si está utilizando un número / cadena de bits para las habilidades, publique la codificación que está utilizando. por ejemplo:
111
esD/F/I
,7
esD/F/I
, etc. - Si una criatura no tiene habilidades, también se puede tomar como un
[P,T, ""]
número equivalente - Lagunas estándar prohibidas
- Este es el código de golf, por lo que gana el código más corto.
Ejemplos:
Input: [[2,2], [1,1]]
Output: 2nd Dies
Input: [[0,2], [0,1]] #0/2 vs 0/1
Output: Neither Die
Input: [[2,1], [2,1]] #2/1 vs 2/1
Output: Both Die
Input: [[1,1, "D"], [2,2]] #1/1 Deathtoucher vs 2/2
Output: Both Die
Input: [[2,2], [0,1, "D"]] #2/2 vs 0/1 Deathtoucher
Output: 2nd Dies
Input: [[2,2], [1,1, "DF"]] #2/2 vs 1/1 Deathtouch First-striker
Output: 1st Dies
Input: [[0,2, "D"], [0,1, "DF"]] #0/2 Deathtoucher vs 0/1 Deathtouch First-striker
Output: Neither Die
Input: [[2,2], [2,2, "F"]] #2/2 vs 2/2 First-striker
Output: 1st Dies
Input: [[2,2, "I"], [1,1, "DF"]] #2/2 Indestructible vs 1/1 Deathtouch First-striker
Output: 2nd Dies
Input: [[9999,9999], [1,1, "I"]] #9999/9999 vs 1/1 Indestructible
Output: Neither Die
Input: [[2,2, "F"], [1,1, "F"]] #2/2 First-Striker vs 1/1 First-Striker
Output: 2nd Dies
#9/9 Deathtouch, Indestructible First-Striker vs 9/9 Deathtouch, Indestructible First-Striker
Input: [[9,9, "DFI"], [9,9, "DFI"]]
Output: Neither Die
fuente
D => 0, F => 1, I => 2
Respuestas:
Perl 5 , 248 bytes
... sin espacios y nuevas líneas:
Pruébalo en línea!
Mi versión sin golf con las diez pruebas de @Veskah (OP), pasa las pruebas:
fuente
JavaScript,
137125120111 bytesEstoy usando números de mapa de bits para habilidades D = 4 F = 2 I = 1 do
"DFI"
sería7
. Mi salida es Ni Murió0
, Primero Murió1
, Segundo Murió2
, Ambos murieron3
.Pruebas con:
Este fue mi primer código de trabajo
Lo que reduje a este intermedio:
fuente
JavaScript (ES6),
8376 bytesToma la entrada como 6 argumentos distintos: 2 x (Poder, Resistencia, Habilidades). Se esperan habilidades como máscaras de bits con:
Pruébalo en línea!
Comentado
fuente
C (gcc) ,
11411395 bytesMucho golf gracias a ceilingcat y Logern.
Compilar con
-DZ=P,T,F,p,t,f)
.Pruébalo en línea!
Verificamos (independientemente, debido a la simetría de la mecánica de combate) si cada una de las criaturas sobrevive al combate, lo que sucede si cualquiera de las dos es cierta:
(Las condiciones anteriores son más importantes).
Las entradas son poder y resistencia como números enteros, y habilidades como un campo de bits (1 = Indestructible, 2 = Toque de muerte, 4 = Primer golpe), la salida también es un campo de bits (1 = La primera criatura sobrevive, 2 = La segunda criatura sobrevive).
fuente
-DZ=P,T,F,p,t,f)
96 bytes: ¡Pruébelo en línea!P=…
lugar dereturn …
eliminar la nueva línea lo lleva a 85 bytes.&&
,||
con bit a bit&
,|
Retina 0.8.2 , 123 bytes
Pruébalo en línea! Enlace incluye casos de prueba, aunque he sustituido
9
por99999
la velocidad. La entrada usa las letrasDFI
aunqueD
debe precederI
. La salida está en el formato1
para sobrevivir y0
para morir. Explicación:Convierte las estadísticas a unario.
Intercambia las estadísticas temporalmente.
Dos
F
s se cancelan.Toque de muerte reduce la resistencia del oponente a 1.
Indestructable reduce el poder del oponente a 0.
Cambie la Resistencia, así que ahora tiene P2, T1, F1; P1, T2, F2
Si la resistencia es mayor que el poder del oponente, entonces sobrevive.
Si ambos mueren, el que tiene First Strike sobrevive.
De lo contrario, First Strike no hace ninguna diferencia.
fuente
C ++,
177131127121 bytesAquí está mi solución no tan corta en C ++. Las habilidades son de 3 bits para cada criatura:
Y simplemente devuelve 0 : si nadie muere, 1 : si las primeras criaturas mueren, 2 : si la segunda criatura muere y 3 : si ambas criaturas mueren.
Pruébalo en línea!
C ++,
8581 bytes (Alternativa)Al hacer un poco de trampa y capturar las variables en lambda y no pasarlas como argumentos, es posible llegar a 81 bytes. No sé si es una solución aceptable, así que la publico como alternativa.
Pruébalo en línea!
fuente
Perl 5, 245 bytes
Corre con
-lapE
Sin golf:
"Toque mortal" se traduce como "tu poder ahora se multiplica por la dureza de tu enemigo", y "indestructible" se traduce como "el poder de tu enemigo ahora es cero", y este último tiene un precedente. El código ejecuta dos rondas, una donde solo los primeros huelguistas pueden atacar, y la otra donde solo los que no son los primeros huelguistas pueden atacar. Si la primera ronda resulta en una muerte, la segunda ronda no sucede. Como ya tratamos con el toque mortal e indestructible al principio, "muerte" es tan simple como verificar si la resistencia es mayor que cero o no.
fuente