Пул задач с зависимостями

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

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

Задание — асинхронная функция без аргументов: вызовите её (await job()), чтобы выполнить его; оно может завершиться ошибкой (исключением).

Дан список заданий jobs, список зависимостей deps той же длины и целое limit ≥ 1. Задание i можно запустить, когда все задания с индексами из deps[i] успешно завершились (если deps[i] пуст — сразу). Одновременно выполняется не больше limit заданий. Свободное место всегда занимает готовое к запуску задание с наименьшим индексом. Задание, у которого хотя бы одна зависимость завершилась ошибкой (или сама никогда не запустится), не запускается никогда.

Если несколько заданий завершаются в один и тот же момент, сначала учтите их все (их успехи открывают новые задания), а потом заполняйте освободившиеся места. Каждое задание длится не меньше 1 мс. В deps нет циклов, повторов и ссылок задания на себя; индексы — от 0 до n − 1, до 30 заданий.

Верните индексы всех запущенных заданий — и успешных, и завершившихся ошибкой — в порядке завершения; при равном моменте — по возрастанию индекса. Для пустого списка ответ [].

Пример: задания (30 мс → 1), (10 мс → 2), (10 мс → ошибка), (5 мс → 4), (1 мс → 5); deps = [[], [], [1], [0, 1], [2]], limit = 2 → [1, 2, 0, 3] (задание 4 зависит от упавшего задания 2 и не запускается).


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

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

Ещё задачи

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