Код Senior Декораторы обновлено

Декоратор ограничения частоты вызовов

Условие

Напишите декоратор-фабрику limit(calls, period, clock): функция может быть вызвана не более calls раз за любые period секунд (скользящее окно). Время берётся вызовом clock(). Если лимит превышен, обёртка не вызывает функцию и возвращает None. Проверка run(calls, period, times) подставляет фальшивые часы с моментами из times и возвращает результаты вызовов.

Примеры

run(2, 10, [0, 1, 2, 10, 11, 12]) // [0, 1, null, 3, 4, null]
run(1, 5, [0, 4, 5, 9, 10]) // [0, null, 2, null, 4]
run(3, 1, [0, 0, 0, 0]) // [0, 1, 2, null]

Как подойти

Подсказки: 2
  1. deque моментов успешных вызовов.
  2. Граница окна: вызов в момент now - period уже не считается.

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

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