Пул заданий с приоритетами и поступлением

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

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

Даны списки одной длины arrivals, jobs и priorities и число limit (не меньше 1). Задание — асинхронная функция без аргументов: вызовите её (await job()), чтобы выполнить его; оно может завершиться ошибкой (исключением). Задание i поступает в момент arrivals[i] (в миллисекундах от вызова функции; список не обязательно отсортирован) и с этого момента готово к запуску. Одновременно может работать не больше limit заданий; задание работает от запуска до завершения, успешного или с ошибкой, и освобождает место в момент завершения.

Всякий раз, когда есть свободное место и готовые незапущенные задания, сразу запускайте готовое задание с наибольшим приоритетом priorities[i]; при равенстве — то, что поступило раньше, а при равных моментах поступления — с меньшим индексом. Задания, поступившие в один и тот же момент, становятся готовыми вместе, до выбора. Верните индексы заданий в порядке запуска (задания, запущенные в один момент, — в порядке выбора) и дождитесь завершения всех заданий. Для пустых списков верните [].

В списках до 50 элементов, приоритеты — целые числа, возможно отрицательные. В тестах каждое задание работает не меньше 1 мс, и ни одно задание не завершается в тот же момент, когда поступает какое-либо задание.

Пример: arrivals = [0, 1, 2, 3], задания работают 10, 5, 5 и 5 мс, priorities = [1, 1, 5, 3], limit = 1 → [0, 2, 3, 1].


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

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

Ещё задачи

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