Код Middle Миграции обновлено

Порядок применения миграций по зависимостям

Условие

Дан граф миграций: словарь «имя миграции -> список зависимостей» (имена вида app.0002_x). Верните порядок применения: миграция идёт после всех своих зависимостей, среди готовых выбирается лексикографически меньшая. Если граф содержит цикл, верните "cycle". Если у какого-то приложения больше одного листа (миграции, от которой никто внутри этого приложения не зависит), верните "conflict:<app>" для первого такого приложения по алфавиту.

Примеры

plan({"blog.0001":[],"blog.0002":["blog.0001"],"auth.0001":[],"blog.0003":["blog.0002","auth.0001"]}) // ["auth.0001", "blog.0001", "blog.0002", "blog.0003"]
plan({}) // []
plan({"a.0001":[],"a.0002":["a.0001"],"a.0003":["a.0001"]}) // "conflict:a"

Как подойти

Подсказки: 2
  1. Лист приложения: миграция, от которой не зависят другие миграции этого приложения.
  2. Алгоритм Кана для порядка.

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

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