Debounce с предельным ожиданием

Задача по программированию с проверкой онлайн

Сложность
Средняя
Языки
Python
JavaScript
TypeScript
Темы
Асинхронность и потоки
Функции и замыкания

Функцию вызывают в моменты events (миллисекунды от вызова вашей функции, по неубыванию; одинаковые моменты возможны). Её обёртка «debounce» не выполняет функцию сразу, а откладывает: после каждого вызова в момент t выполнение назначается на момент min(t + wait, first + max_wait), где first — момент первого вызова текущей серии, а прежнее назначение отменяется. Серия начинается с первого вызова после предыдущего выполнения (или с самого первого вызова) и заканчивается выполнением. Если вызов приходит ровно в назначенный момент, он обрабатывается раньше выполнения и входит в серию.

Ваша функция асинхронная: смоделируйте обёртку таймерами (setTimeout в JS/TS, loop.call_later или asyncio.sleep в Python; текущее время в миллисекундах: Date.now() в JS/TS, round(asyncio.get_running_loop().time() * 1000) в Python) или вычислите ответ иначе и верните список моментов, в которые функция выполнилась, по возрастанию. Для пустого events ответ []. Ограничения: 1 ≤ wait ≤ max_wait, до 100 вызовов, моменты до 10⁶.

Пример: [0, 5, 12, 30], wait = 10, max_wait = 15 → [15, 40] (первая серия начинается в 0 и не может ждать дольше 15 мс).


Источник: задача CodeShare

Решить онлайнБесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Ещё задачи

Все задачи для тренировки