Saltar al contenido

El abrevadero que no se seca

Enunciado

Herminia tiene el ganado en tierra de secano y toda el agua del rancho pasa por el aljibe. Va a mandar hacer uno nuevo y necesita el tamaño exacto: más chico se le seca y más grande le cuesta de más. Tiene apuntado, día por día, lo que llovió y lo que bebió el ganado en el mes más seco que recuerda, y con eso quiere decidir.

Cada día pasan dos cosas, en este orden. Primero cae la lluvia del día y entra al aljibe; lo que no cabe se derrama y se pierde para siempre. Después llega el ganado y bebe lo suyo. El aljibe se estrena lleno hasta el borde. Si un día el ganado llega y no hay agua para todo lo que bebe, ese aljibe era chico.

Escribe una función que reciba lluvia y bebe, dos listas del mismo tamaño (al menos un día) con enteros de 0 o más: los litros que cayeron y los litros que se bebieron cada día, en orden. El ganado bebe algo por lo menos un día. Regresa un entero: los litros del aljibe más chico que aguanta todos los días de la lista.

Con lluvia de 3, 0, 5 y 0 litros y consumo de 2, 4, 1 y 3, la respuesta es 6. El aljibe de 6 arranca en 6; el primer día se derraman los 3 que cayeron, porque ya estaba lleno, y el ganado lo deja en 4; el segundo no llueve y lo deja en 0; el tercero sube a 5 y lo deja en 4; el último lo deja en 1. Con un aljibe de 5 no se llega: el segundo día el ganado pide 4 litros y nomás hay 3.

Ojo con las dos cuentas fáciles. El día que más se bebe no basta, y restarle a todo lo que se bebió en el mes todo lo que llovió tampoco, porque el agua que se derrama ya no vuelve. Hay meses de hasta 60 días y los litros de cada día llegan a mil millones, así que probar un tamaño por vez no termina.

Ejemplos

  • El ejemplo, con la lluvia que se derrama

    [3, 0, 5, 0], [2, 4, 1, 3] → 6

  • Los primeros días no llueve

    [0, 2, 1], [4, 1, 3] → 5

  • Llueve de sobra todos los días

    [10, 10], [1, 1] → 1

  • Un solo día

    [0], [7] → 7

  • Se derrama al principio y falta al final

    [5, 5, 0, 0, 9], [1, 1, 4, 4, 1] → 9

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

Empiezas con esto

Python

def aljibe(lluvia, bebe):
    pass

JavaScript

function aljibe(lluvia, bebe) {
}
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 log n)

Ver todos los retos →