Код Senior CI и параллельный запуск обновлено

Волны запуска джоб по needs

Условие

Джобы пайплайна заданы словарём «имя → список needs». Напишите waves(jobs): разбить джобы на волны, где в волну входят все ещё не запущенные джобы, у которых все зависимости уже в предыдущих волнах. Имена в волне по алфавиту. Если оставшиеся джобы не могут стартовать (цикл или зависимость от несуществующей джобы), вернуть None.

Примеры

waves({"lint":[],"unit":[],"build":["lint"],"e2e":["build","unit"],"report":["e2e"]}) // [["lint", "unit"], ["build"], ["e2e"], ["report"]]
waves({}) // []
waves({"a":["b"],"b":["a"]}) // null

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

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