Giter Club home page Giter Club logo

cx_viajante's Introduction

traveller

Implementação básica de um algoritmo que percorre todos os caminhos de um grafo procurando o menor custo entre os nós solicitados.

Instalação

Faça cópia do repositório para seu ambiente

git clone [email protected]:ottohenrique/cx_viajante.git

É necessário ter o ruby instalado no ambiente (de preferência versão > 2.7) para execução do projeto.

Testes

Instale as dependências executando o comando abaixo dentro da pasta do projeto.

bundle install

Após isso execute o rspec para rodar os testes que estão em ./specs

bundle exec rspec

Execução

Modo console

Dentro da pasta do projeto, execute:

./traveller.rb config.csv

config.csv é o arquivo de configuração necessário com todos os vértices do grafo, no formato "DE,PARA,CUSTO". Colocar um vértice por linha

O programa é interativo e irá executar perguntando qual o caminho desejado no formato "DE-PARA"

Modo web

Dentro da pasta do projeto, execute:

./traveller_web.rb config.csv

Esse comando sobe um servidor WEBRick padrão na porta 8000.

As rotas disponíveis são:

  • 'GET /routes?from=X&to=Y' para buscar o caminho mais barato. Ex:
$ curl "localhost:8000/routes?from=gru&to=cdg"
Rota encontrada: ["GRU", "BRC", "SCL", "ORL", "CDG"], custo: 40
  • 'POST /route' para inserir um novo vértice, ex:
$ curl  -X POST "localhost:8000/route" -d 'TAU,GAL,85' -v
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 127.0.0.1:8000...
* ...
* upload completely sent off: 10 out of 10 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 201 Created
< Server: WEBrick/1.6.1 (Ruby/2.7.3/2021-04-05)
< Date: Tue, 18 May 2021 18:05:21 GMT
< Content-Length: 38
< Connection: Keep-Alive
< 
* Connection #0 to host localhost left intact
Rota TAU,GAL,85 adicionada com sucesso

Possíveis melhorias e descobertas

  • Não foi adotada nenhuma estratégia de programação dinânimca no algorítmo de busca, como excluir rotas já percorridas.
  • Poderia ter usado a biblioteca básica de testes do ruby minitest, evitando a dependência do rspec (https://github.com/seattlerb/minitest)

cx_viajante's People

Contributors

ottohenrique avatar

Watchers

 avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.