/desafio-multiverso-grafos

Desafio Rick da Solutis com Grafos

MIT LicenseMIT

N|Solid

NOSSO DESAFIO RICK - GRAFOS

Na ficção científica, a viagem entre diferentes universos, é feita através de portais ou buracos de minhocas que conectam mundos diferentes ou até mesmo dimensões diferentes.

Imagine que você é um físico renomado que descobriu “buracos de minhocas” (rotas) que permitem o deslocamento entre universos. De acordo com sua descoberta, Todas as rotas são unidirecionais, ou seja, uma rota do universo A para o universo B não implica existência de uma rota do universo B para o universo A.

Mesmo quando existam rotas nos dois sentidos, elas são distintas e não possuem necessariamente a mesma distância (medidas em unidades de espaço-tempo).

O objetivo deste desafio é ajudar futuros viajantes a navegar entre os universos gastando a menor quantidade de espaço-tempo possível. Seu software deverá ser capaz de calcular o custo de deslocamento entre rotas, os números diferentes de rotas entre universos e as rotas mais econômicas.

Os universos e as rotas correspondem respectivamente aos vértices e arestas ponderadas do grafo abaixo:

N|Solid

Seu código deverá resolver os seguintes problemas:

  • A distância de A a C passando por B?
  • A distância entre A e D?
  • A distância de A a C passando por D?
  • O número de rotas saindo de C e voltando a C com no máximo 3 paradas?
  • O número de rotas entre A e C com no máximo 4 paradas?
  • A menor rota (em espaço-tempo) entre A e C?
  • A menor rota (em espaço-tempo) saindo de B e voltando a B?
  • O número de diferentes rotas saindo de C e voltando a C com distância máxima de 300 unidades de espaço-tempo?

A forma de entrada e saída dos dados fica a sua escolha.

REGRAS GERAIS

Pedimos que você leia atentamente as instruções abaixo e crie uma solução de código usando Java, JavaScript, Ruby, ou Pyhton.

  • Faça a cópia do repositório (fork), desenvolva e submeta uma solicitação de mudança (pull request) no branch master.
  • Em caso de dúvidas basta abrir uma issue com sua pergunta (aqui mesmo no github) que nossa equipe irá respondê-lo assim que possível.
  • Você não poderá usar bibliotecas externas ou ferramentas resolver o problema das rotas/grafo.
  • Não será permitido o uso de bancos de dados orientedos a grafos.
  • Avaliaremos uma variedade de aspectos, como design da solução, orientação a objeto, complexidade do código e a existência de testes unitários.
  • Esperamos que você encaminhe um código que acredite ter qualidade, que possa ser executado e evoluído.
  • Caso deseje evoluir a ideia seguindo essa base, fique à vontade: por exemplo, adaptar as entradas e saídas para ser um serviço web, criar uma interface gráfica, etc.

BUILD E EXECUÇÃO

  • Envie as instruções para execução do código
  • De preferência, utilize um ferramenta como gradle, maven, npm ou yarn para realizar as tarefas necessárias de build.

BOA SORTE!