Saltar al contenido

La barra de vida

Enunciado

En Pixelia, una poción nunca llena la barra de vida más allá del máximo: lo que sobra se pierde. El héroe empieza con la barra llena y en cada turno recibe un golpe o toma una poción.

Escribe una función que reciba maximo (entero de 1 en adelante) y cambios, una lista de enteros (negativo es golpe y positivo es poción; puede venir vacía). Aplica los cambios en orden: suma cada uno a la vida y, si pasa de maximo, déjala en maximo en ese mismo paso. Regresa el índice del cambio con el que la vida llega a 0 o menos, o -1 si nunca llega. Los índices empiezan en 0, y lo que viene después no importa.

Con 10 y [-4, 8, -7, -3], la vida va 6, luego 14 que se queda en 10, luego 3 y luego 0. Llegar a 0 ya es caer: regresa 3. Si no recortaras en cada paso, habría llegado al final con 4 y sobrevivido.

Ejemplos

  • El del ejemplo

    10, [-4, 8, -7, -3] → 3

  • Sobrevive

    20, [-5, -5, 3, -10] → -1

  • Cae abajo de 0 y después se cura

    5, [-2, -4, 6] → 1

  • Poción con la barra llena

    8, [5, -8] → 1

  • Dos pociones que se desperdician

    10, [-3, 5, 5, -9, -2] → 4

Además de estas, el reto tiene pruebas ocultas que se revelan al enviar tu solución.

Empiezas con esto

Python

def golpe_fatal(maximo, cambios):
    pass

JavaScript

function golpeFatal(maximo, cambios) {
}
Resolver este reto

Se abre en el navegador, con el editor y las pruebas. Este reto es del plan completo; los de O(1) y O(log n) son gratis.

Más retos de O(n)

Ver todos los retos →