Una vez que inicies el ejercicio se aplican las siguientes reglas estrictas:
Si rompés cualquiera de estas reglas, el ejercicio se cierra automáticamente y se envía tu última versión al evaluador marcada como invalidada.
Podés consultar las instrucciones y la documentación en cualquier momento desde los botones del header — eso no rompe las reglas.
Necesitamos limitar la cantidad de requests que un cliente puede hacer a nuestra API. La estrategia elegida es un sliding window log: cada request queda registrada con su timestamp, y al recibir una nueva consulta se cuentan cuántas requests del mismo cliente ocurrieron en la última ventana de tiempo.
Implementar una clase SlidingWindowRateLimiter con la siguiente API:
abstract class SlidingWindowRateLimiter {
constructor(maxRequests: number, windowMs: number) {}
abstract isAllowed(clientId: string, now?: number): boolean;
abstract remaining(clientId: string, now?: number): number;
}
maxRequests=3, windowMs=1000, si llegan 3 requests en t=0,100,200 y luego una en t=500, la cuarta debe rechazarse. Pero si la cuarta llega en t=1100, debe permitirse.isAllowed() debe ser eficiente incluso con miles de clientes activos.💡 Tip: arrastrá la esquina inferior derecha del editor para agrandarlo. La validación TypeScript se muestra en tiempo real.
El test ha sido cerrado porque saliste de la pantalla.
Tu última versión del código fue registrada. El evaluador será notificado.
No es posible reanudar el ejercicio.
Se cumplieron los 30 minutos del ejercicio.
Tu última versión del código fue enviada al evaluador.
El ejercicio quedó cerrado.