El abrevadero que no se seca
- O(n log n) · Difícil
- Plan completo
- Python
- JavaScript
- listas
- búsqueda
- ciclos
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):
passJavaScript
function aljibe(lluvia, bebe) {
}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.