Instruções
Ordenação topológica
Dado um mapeamento entre itens e itens dos quais eles dependem, uma ordenação topológica de itens faz com que nenhum item preceda um item do qual ele depende. Existem dois algoritmos populares para a ordenação topológica: a ordenação topológica de Kahn (1962) e a busca profunda.
O que fazer:
Escreva uma função que retorne uma lista com ordem de compilação válida de bibliotecas a partir de suas dependências.
Critérios de Aceitação:
- Assuma que os nomes das bibliotecas são palavras únicas.
- Itens mencionados apenas como dependentes não têm dependentes próprios, mas sua ordem de compilação deve ser dada.
- Quaisquer autodependências devem ser ignoradas.
- Quaisquer dependências não ordenáveis devem ser ignoradas.
dw04 fosse adicionado à lista de dependências de dw01.
A entrada da função será uma string em várias linhas. Cada linha será composta pelo nome da biblioteca, seguida por suas dependências (se existirem).
Por exemplo:
const libsSimple =
`aaa bbb
bbb`;Critérios de Aceitação:
Testes:
- `topologicalSort` deve ser uma função.
- `topologicalSort(libsSimple)` deve retornar um array.
- `topologicalSort(libsSimple)` deve retornar `['bbb', 'aaa']`.
- `topologicalSort(libsVHDL)` deve retornar `['ieee', 'std_cell_lib', 'gtech', 'dware', 'dw07', 'dw06', 'dw05', 'dw02', 'dw01', 'dw04', 'std', 'ramlib', 'synopsys', 'dw03', 'des_system_lib']`.
- `topologicalSort(libsCustom)` deve retornar `['base', 'c', 'd', 'b', 'a']`.
- `topologicalSort` deve ignorar dependências não ordenáveis.
Console