Saltar al contenido

Los costales antes de la lluvia

Enunciado

Remedios mira las nubes desde la era de la trilla y ya sabe lo que viene: la lluvia entra en horas horas y el grano que quede tendido se pierde. En la era hay montones de espigas, cada uno con sus costales, y la trilladora se para en un montón al empezar la hora. Ahí se queda toda la hora, aunque acabe el montón a la mitad, y nunca reparte una hora entre dos montones.

El mecánico le gradúa la trilladora a la capacidad que ella pida: los costales que muele en una hora, siempre del mismo montón. Un montón se lleva las horas que salgan de partir sus costales en pedazos de esa capacidad, y el último pedazo también se lleva su hora completa, aunque vaya a medias: un montón de 7 costales con capacidad 3 se lleva 3 horas. Una máquina más grande nunca se tarda más: si con una capacidad toda la era queda trillada antes de la lluvia, con cualquiera más alta también. Cuanto más alta la capacidad, más se maltrata el grano, así que Remedios quiere la más chica que le salve la cosecha.

Escribe una función que reciba montones, una lista de enteros positivos con los costales de cada montón (al menos uno, en cualquier orden), y horas, un entero que nunca es menor que el número de montones. Regresa un entero: la capacidad más chica con la que toda la era queda trillada en horas horas o menos.

Con montones de 3, 6, 7 y 11 costales y 8 horas, la respuesta es 4: los montones se llevan 1, 2, 2 y 3 horas, que son 8 justas. Con capacidad 3 se llevarían 1, 2, 3 y 4, que son 10, y la lluvia las agarra tendidas. Cuidado con la cuenta de a ojo: repartir el total de costales entre las horas no da la respuesta, porque el montón más grande se lleva sus horas solo y las de los chicos no le sirven de nada. Y hay eras de hasta 50 montones de mil millones de costales, así que probar una capacidad por vez tampoco termina.

Ejemplos

  • El ejemplo

    [3, 6, 7, 11], 8 → 4

  • Repartir el total entre las horas no alcanza

    [30, 11, 23, 4, 20], 6 → 23

  • Una hora por montón

    [3, 6, 7, 11], 4 → 11

  • Un montón de mil millones en una hora

    [1000000000], 1 → 1000000000

  • Sobran horas de más

    [3, 6, 7, 11], 27 → 1

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

Empiezas con esto

Python

def por_hora(montones, horas):
    pass

JavaScript

function porHora(montones, horas) {
}
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 →