Git Product home page Git Product logo

tw-problem-one-trains-review's Introduction

ThoughtWorks - Next Steps / Coding Assignment

André de Sousa Araújo

Problem one: Trains

The local commuter railroad services a number of towns in Kiwiland. Because of monetary concerns, all of the tracks are 'one-way.' That is, a route from Kaitaia to Invercargill does not imply the existence of a route from Invercargill to Kaitaia. In fact, even if both of these routes do happen to exist, they are distinct and are not necessarily the same distance!

The purpose of this problem is to help the railroad provide its customers with information about the routes. In particular, you will compute the distance along a certain route, the number of different routes between two towns, and the shortest route between two towns.

This repo shows some freatures to get information about the train routes.

Notas (Em português)

Tecnicamente optei por criar uma classe para o grafo com as operações mais importantes: inserir vertices, inserir arestas, obter o vertice X (parametro), obter todos os ciclos e a função que faz uma busca em largura (Breadth-First Search - BFS).

A busca em largura permite achar o menor caminho entre um nó raiz e os outros nós do grafo. Neste caso, usando a bfs eu armazenei os caminhos e os respectivas distâncias. A cada novo caminho encontrado, eu sumarizei as distâncias daquele caminho. Além disto, adicionei uma função na busca em largura para recuperar os ciclos existentes para combinar com rotas básicas com rodas adicionais (de ida e volta).

E deixei a parte especializada sobre informações de rotas em outras classe (TrainRoutes):

  • Obter todas rotas de uma origem para um destino
  • Obter o menor caminho e tamanho de uma origem para um destino
  • Calcular a distância de uma determinada rota. A estratégia utilizada foi caminhar no grafo somando as distâncias
  • Obter a quantidade de paradas de uma origem para um destino, obter o máximo ou menor que um valor. A estratégia foi usar a busca em largura para obter os caminhos, e contabilizar as quantidades de paradas destes caminhos. Assim bastou filtrar conforme os parâmetros.
  • Obter todas os caminhos com uma distância máxima. A estratégia foi também usar a busca em largura, mas controlar o máximo da distância ao caminhar para as rotas adjacentes. No algoritmo eu vou sumarizando o total da distância para cada caminho, e quando atingo o máximo para-se de caminhar. Isto não ficar indefinidamente caminhando por ciclos em um grafo.

Install guide

Create the virtualenv

$ virtualenv -p python3 twenv
$ source twenv/bin/activate

Install dependencies

$ pip install -r requirements.txt

Run the code and infom the INPUT:

AB5, BC4, CD8, DC8, DE6, AD5, CE2, EB3, AE7 

If other input, remember to change the run.py with the correct parameters. Eg: In get_number_trips_by_stop('C', 'C', stops=3), the Town C should be exists in yout input.

$ python run.py

Test (Automated Tests)

$ make test

PS: Formatação, estilo, comentários e documentação.

Usei o sublime text e formatei conforme o PEP8 Autoformat. Nome de classes não costumo user MixedCase, mas segui o PEP8. Já as demais regras eu segui normalmente, mas procuro seguir o estilo básico do time ou da empresa. Como também a opção de documentar classes, funções, pode variar optei por não fazê-lo, apenas coloquei nas classes de forma a demonstar a capacidade de fazer. Além disto, eu considero importante quando as classes ou funções serão expostas, mas não é caso, pois é um exercício.

tw-problem-one-trains-review's People

Contributors

dedeco avatar

Watchers

James Cloos avatar  avatar  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.