Код 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
- Храните для каждого ключа список времён разрешённых попыток.
- Перед проверкой выбросьте времена, вышедшие из окна.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.