La racha más larga de días sin gastar
Requisito
A partir de un mes de transacciones del libro de cuentas, encuentra la
racha más larga de días consecutivos de julio sin ningún
gasto (julio de 2026 tiene 31 días). Imprime una tira de
calendario que marque con # cada día sin gasto y, después,
la longitud de la racha. Los datos están en el código de abajo; ambas
versiones deben imprimir las líneas que aparecen bajo
Salida esperada.
Salida esperada
July (# = no-spend day): ···###··######··#####·#####··## Longest no-spend streak: 6 days
Lado a lado
Dart nativo
FxDart
Por qué difieren
Una racha es un valor que se va acumulando, y ese es exactamente el
trabajo de scan: todos los estados intermedios de un
fold, conservados. El pipeline se lee como la propia definición — los
días (range), transformados con map a
hubo-gasto-o-no, recorridos con scan hasta formar una
racha acumulada que se reinicia en los días con gasto, y
max elige el pico. El bucle nativo calcula lo mismo con
dos contadores mutables y un if — lo verificas
reproduciendo mentalmente las iteraciones, y la lógica de la racha
queda fundida con la construcción de la tira que hay al lado. En la
versión de FxDart la tira (map + join) y la
racha son dos pipelines independientes, legibles por separado, sobre
el mismo range.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 10,000
Tiempo Empate
Memoria pico Empate
N = 1,000,000
Tiempo Empate
Memoria pico Empate
Las barras son medianas de iteraciones cronometradas repetidas en procesos nuevos por lado (los N pequeños se agrupan por resolución del temporizador). Dos lados a menos del 5% entre sí — o a menos de 0.6 ms, una diferencia que nadie puede percibir — cuentan como empate; las carreras relativas ajustadas se vuelven a medir hasta 5 veces. En una app, cualquier cosa por debajo de unos pocos milisegundos es invisible para el usuario, gane la barra que gane. La memoria es el RSS pico del proceso. La VM de Dart y el dataset son idénticos en ambos lados, así que la diferencia entre las dos barras es lo que retiene el pipeline en sí.