La racha más larga de días sin gastar

Gana FxDart

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

Apple M1 Max, 32 GB de RAM · Dart 3.12.2 (compilado AOT) · 2026-08-24

N = 100

Tiempo Empate

Dart nativo 4.5 µs
FxDart 5.6 µs

Memoria pico Empate

Dart nativo 16.4 MB
FxDart 16.5 MB

N = 10,000

Tiempo Empate

Dart nativo 261 µs
FxDart 262 µs

Memoria pico Empate

Dart nativo 19.6 MB
FxDart 19.6 MB

N = 1,000,000

Tiempo Empate

Dart nativo 23.8 ms
FxDart 24.0 ms

Memoria pico Empate

Dart nativo 106.6 MB
FxDart 106.4 MB

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í.