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.
  • 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.
Use os seguintes dados como exemplo: <pre> LIBRARY LIBRARY DEPENDENCIES ======= ==================== des_system_lib std synopsys std_cell_lib des_system_lib dw02 dw01 ramlib ieee dw01 ieee dw01 dware gtech dw02 ieee dw02 dware dw03 std synopsys dware dw03 dw02 dw01 ieee gtech dw04 dw04 ieee dw01 dware gtech dw05 dw05 ieee dware dw06 dw06 ieee dware dw07 ieee dware dware ieee dware gtech ieee gtech ramlib std ieee std_cell_lib ieee std_cell_lib synopsys </pre> A compilação de uma biblioteca na linguagem VHDL tem a restrição de que uma biblioteca deve ser compilada após qualquer biblioteca da qual ela dependa. Os dados acima seriam não ordenáveis se, por exemplo, 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