1. Faro

Nivel 8 · La racha más larga de días en meta

La solicitud

De Laura Bennett, Directora de Finanzas

“Para la revisión de diciembre: ¿cuál fue nuestra racha más larga de días consecutivos en o por encima de la meta diaria de $4,000 en las dos primeras semanas? Solo el número de días.”

Tu objetivo

Asigna a result la longitud (un int) de la racha más larga de días consecutivos de daily_revenue cuyo valor sea al menos target (4000 cuenta como meta cumplida).

  • Guarda un número en resultpendiente

Tu código

Python

Cargando el editor…

    ResultadoPresiona Ejecutar para ver el tuyo

    Mote revisa tu resultado

    Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

    La lección

    Dos acumuladores a la vez

    Una pregunta sobre rachas necesita un poco más que un total acumulado. Sigues dos números mientras recorres la lista en orden:

    • current, la longitud de la racha en la que estás ahora mismo;
    • best, la racha más larga que has visto hasta ahora.
    best = 0
    current = 0
    for revenue in daily_revenue:
        if revenue >= target:
            current += 1          # the run continues
        else:
            current = 0           # the run is broken
        best = max(best, current)

    current += 1 es la abreviatura de current = current + 1. max(best, current) devuelve el mayor de los dos, así que best solo puede subir. El bucle tiene que visitar los días en orden de fecha, por eso la lista ya está ordenada del 1 al 14 de diciembre. Una racha sobre datos desordenados no significa nada.

    Recorriendo diciembre

    Día a día, la prueba de la meta da este patrón (✓ en o por encima de $4,000):

    Dec  1  2  3  4  5  6  7  8  9 10 11 12 13 14
         .  ✓  ✓  .  ✓  ✓  ✓  ✓  .  ✓  ✓  ✓  ✓  ✓

    current sube a 2, se reinicia el 4 de dic, sube a 4, se reinicia el 9 de dic y luego sube a 5 en el último día. best termina en 5. Fíjate en que 11 de los 14 días estuvieron en meta, pero la pregunta es por la racha más larga sin interrupciones, así que contar las marcas no basta.

    Dónde suele romperse el código de rachas

    La versión más tentadora actualiza best solo cuando termina una racha, dentro del else. Parece ordenada, pero una racha que sigue en curso cuando la lista termina nunca se registra. Aquí la racha más larga es justo esa, del 10 al 14 de dic, así que la versión ordenada responde 4. Actualizar best en cada pasada, después del if/else, resuelve el final de la lista sin esfuerzo.

    La otra trampa es el límite. «En o por encima de $4,000» significa >=. El 12 de dic los ingresos fueron exactamente 4,000, así que con > la racha final se parte en dos y la respuesta vuelve a bajar a 4.

    Errores comunes

    • Actualizar best solo cuando se rompe una racha y perder la racha final.
    • Usar > cuando la regla dice «en o por encima de».
    • Contar todos los días en meta (11) en lugar de la racha consecutiva más larga.
    • Olvidar reiniciar current a 0 al fallar, lo que convierte el conteo en un simple total.

    Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.