Найти тему
Николай Сталин

F. Точки входа. Yandex Cup 2020: Фронтенд — Квалификация

Оглавление

В руки инженеров космического корабля AVOS попала документация системы жизнеобеспечения.

В документации перечислены модули системы жизнеобеспечения и их зависимости, определяющие порядок. Если модули будут запущены в неправильной последовательности, корабль самоуничтожится.

Для того, чтобы инженерам запустить систему жизнеобеспечения, необходимо найти модули, которые можно запустить первыми.

Формат ввода

Декларативное описание документа выглядит следующим образом:

{  
    // абсолютный путь до дирректории проекта в файловой системе  
    absoluteRepoPath: "/var/www/projects/project1",  
    // список алиасов по путям из исходной системы сборки  
    aliases: {  
        "@": "/var/www/projects/project1/src",  
    },  
    // информация обо всех модулях данного проекта  
    modules: [  
        {  
            // относительный от корня путь  
            file: "./src/pages/a.js",  
            deps: [  
    // валидная для исходной системы сборки строка, описывающая путь до модуля  
    // гарантируется, что такой модуль существует и описан в данной секции  
                "/var/www/projects/project1/src/pages/b.js",  
                "./b.js"  
            ],  
        },  
        {  
            file: "./src/pages/b.js",  
            deps: [  
                "@/pages/с.js",  
            ],  
        },  
        {  
            file: "./src/pages/c.js",  
            deps: [ ],  
        },  
        {  
            file: "./src/pages/d.js",  
            deps: [ ],  
        },  
    ],  
}

Формат вывода

Результатом работы алгоритма должен быть лексикографически упорядоченный массив из модулей, с которых можно начать запуск, где каждый модуль описывается через абсолютный путь в файловой системе:

[  
    "/var/www/projects/project1/src/pages/c.js",  
    "/var/www/projects/project1/src/pages/d.js"  
]

Следует понимать, что размерность массива эквивалентна количеству компонент связности в исходном графе. В случае, если для конкретной компоненты связности допустимы несколько модулей для старта, следует выбирать при помощи лексикографического порядка.