Saltar al contenido

Las sacas que se acumulan

Enunciado

Onésimo atiende la ventanilla de correos de un pueblo que acaba de aparecer en el mapa. El primer día le llegaron primera sacas de correo, y cada día siguiente le llegan mas sacas más que el día anterior: si el primer día llegaron 3 y cada día llegan 2 más, el segundo día llegan 5, el tercero 7, el cuarto 9, y así. Nada se reparte todavía, así que las sacas se van apilando en la bodega.

Escribe una función que reciba primera (de 1 en adelante), mas (de 0 en adelante) y cupo (de 1 en adelante), y regrese el número del día en que lo apilado llega al cupo o lo pasa. El primer día es el día 1.

Con primera igual a 3, mas igual a 2 y un cupo de 100: el día 1 hay 3 sacas apiladas, el día 2 hay 8, el día 3 hay 15... el día 9 hay 99, que todavía no alcanza, y el día 10 hay 120. Regresas 10.

Si mas es 0 llegan las mismas sacas todos los días. Y si el primer día ya llega al cupo, regresas 1.

primera y mas llegan hasta mil millones y el cupo hasta un billón, o sea un millón de millones. Con pocas sacas al día eso son cientos de miles de millones de días: sumar día por día no termina.

Lo que sí sale de una cuenta, sin sumar día por día, es cuántas sacas hay apiladas en un día cualquiera. Vuelve al ejemplo: con primera igual a 3 y mas igual a 2, al día 4 llegaron 3, 5, 7 y 9 sacas, y apiladas hay 24. Esas 24 son las 3 del primer día contadas cuatro veces, o sea 12, más el aumento que se fue juntando: 0, 2, 4 y 6, que suman otros 12. Y ese 0, 2, 4, 6 tampoco hace falta sumarlo de uno en uno. Con esa cuenta puedes ir partiendo el rango de días por la mitad. Pero ojo: aquí nadie te dio un día tope del cual partir, y tienes que conseguirlo antes de partir nada.

Ejemplos

  • El del ejemplo

    3, 2, 100 → 10

  • El cupo cae justo en un día

    3, 2, 99 → 9

  • Las mismas sacas todos los días

    4, 0, 30 → 8

  • El primer día ya alcanza

    50, 10, 50 → 1

  • Crecen rápido

    1, 3, 10 → 3

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

Empiezas con esto

Python

def dia_cupo(primera, mas, cupo):
    pass

JavaScript

function diaCupo(primera, mas, cupo) {
}
Resolver este reto

Se abre en el navegador, con el editor y las pruebas. Es gratis y no hace falta cuenta para empezar.

Más retos de O(log n)

Ver todos los retos →