Inspirado por esta conversación en el chat.
Tu objetivo en este desafío es emular a un ninja y contar cuántas muertes le quedan.
Especificaciones
Tu ninja comienza con 9 muertes restantes. También obtiene una salud inicial integral como entrada.
Luego, toma como entrada una lista de eventos en su vida que alteran su salud. Estos pueden ser enteros negativos, positivos o cero.
En cualquier momento, si su salud llega a cero o por debajo de él, pierde una vida y su salud vuelve a la salud inicial.
Su programa debe informar la cantidad de muertes que le quedan. Si le queda cero o menos, en su dead
lugar , debe generar .
Este es el código de golf , por lo que gana el código más corto en bytes .
Casos de prueba
3, [] -> 9
100, [-20, 5, -50, 15, -30, -30, 10] -> 8
10, [-10, -10, -10, -10] -> 5
10, [-10, -10, -10, -10, -10, -10, -10, -10, -10] -> dead
0, [] -> dead
0, [1] -> dead
100, [10, -100] -> 9
code-golf
number
simulation
Maltysen
fuente
fuente
Respuestas:
Jalea ,
302826 bytesPruébalo en línea!
Cómo funciona
fuente
Japt,
403932 bytesPruébalo en línea!
Cómo funciona
Mientras trataba de campo de esta última noche (lejos de una computadora, nada menos), me encontré con un reemplazo interesante para
>0
:¬
. En los números, esto toma la raíz cuadrada, que devuelveNaN
los números negativos.NaN
es falso, por lo que esto devuelve exactamente el mismo verdadero / falso que>0
.La extensión de este truco un poco más lejos, podemos restablecer T a T si y sólo si es
>=0
en sólo cinco bytes:T¬²ªU
. ¿Como funciona esto? Vamos a ver:Como puede ver,
T¬²
devuelveNaN
siT
es negativo; de lo contrario, vuelveT
. Puesto queNaN
y0
son ambos Falsy, esto proporciona una manera fácil de restablecer la salud del ninja conªU
. Este truco también se usa para devolver las vidas del ninja si ese número es positivo o"dead"
negativo.Poniendo todo esto junto:
Si se garantiza que la entrada no es negativa, o incluso positiva, podemos jugar golf de 1 o 4 bytes:
fuente
JavaScript ES6,
62 6058 bytesGuardado 4 bytes gracias a @ETHproductions
Pruébelo en línea (todos los navegadores funcionan)
Explicación
fuente
d--&&a
Funcionaría ob.reduce(...)&&d<1?"dead":d
?map
latereduce
en la mayoría de los escenarios:(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i)&&d<1?"dead":d
es 57..reduce(...)&&
que funcione debido a los.reduce
retornos0
, no funcionará.(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i,a)|d<1?"dead":d
Funcionaría en su lugar?CJam, 35 bytes
Pruébalo en línea!
fuente
Haskell,
817775 bytesEjemplo de uso:
p 10 0 100 [-20, 5, -50, 15, -30, -30, 10]
->"8"
fuente
Pyth, 32
Tenga en cuenta que hay un espacio principal. Probablemente este no sea el mejor enfoque, pero fue lo primero que se me ocurrió. Reduce el exceso de entrada al agregar los valores a la salud del ninja e incrementar un contador y restablecer la salud cuando cae por debajo de cero. Agregamos un cero al final de la lista para contar si el último cambio mata al ninja, y luego solo verificamos si el ninja está muerto. El caso de salud de inicio cero está codificado.
Banco de pruebas
fuente
MATL, 32
Explicación
La pila ahora se ve así (para entrada
100, [-20, 5, -50, 15, -30, -30, 10]
):Pop la matriz y el bucle
Si la salud es cero, establezca el contador de muertes en cero. Manejo de casos especiales para
initial health = 0
.Eliminar el valor de recarga de la pila
Si el contador de muertes es cero o menos, elimínelo e imprima 'muerto' en su lugar.
fuente
TeaScript ,
36 3431 bytesSimilar a mi respuesta de JavaScript. Los últimos 4 caracteres son la descompresión de la cadena "muerto".
El intérprete en línea de TeaScript no admite la entrada de matriz, por lo que deberá abrir la consola y ejecutar esto escribiendo:
Explicación
fuente
Python 2.7,
826655106 bytesGracias a @RikerW por -16 bytes.:(Gracias a @Maltysen por -11 bytes.:(Primero escriba salud, luego ingrese, luego eventos en forma de lista.
fuente
C # 207
Toma la entrada a través del flujo de argumentos. El primer argumento es la cantidad de salud y todo lo demás es la lista de eventos.
Versión legible / sin golf
Ejemplos:
CSharp.exe 3 => 9
CSharp.exe 100-20 5-50 15-30-30 10 => 8
(Psst.) CSharp.exe es el nombre utilizado como ejemplo. Debe llamar así en realidad: argumentos [nombre_programa.exe], sin paréntesis cuadrados.
fuente