Код Middle Аутентификация и сессии обновлено

Ограничение частоты попыток входа

Условие

Напишите rateLimit(events, limit, windowSec). events массив [время в секундах, ключ] в порядке возрастания времени (ключ, например, логин или IP). Для каждого события верните true, если попытка разрешена, иначе false.

Попытка разрешена, если для этого ключа число разрешённых попыток в окне (t - windowSec, t] меньше limit. Отклонённые попытки не учитываются.

Примеры

rateLimit([[0, "a"], [1, "a"], [2, "a"], [3, "a"]], 3, 10) // [true, true, true, false]
rateLimit([[0, "a"], [1, "a"], [2, "a"], [10, "a"]], 3, 10) // [true, true, true, true]
rateLimit([[0, "a"], [0, "b"], [1, "a"], [1, "b"], [2, "a"]], 2, 5) // [true, true, true, true, false]

Как подойти

Подсказки: 2
  1. Храните для каждого ключа список времён разрешённых попыток.
  2. Перед проверкой выбросьте времена, вышедшие из окна.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.