Python Case Resolution
Por: Bernardo Moreira • 9/4/2019 • Ensaio • 2.719 Palavras (11 Páginas) • 185 Visualizações
Programação 1 (LTI), 2015/2016
Projeto
(este enunciado tem 10 páginas)
tacoAtaco
Contexto
Para aumentar a qualidade do ambiente urbano, relativamente ao ruído e à poluição atmosférica, uma decisão recente da Câmara Municipal de Lisboa determina que a partir de uma data próxima todos os tuk tuks a circular na cidade sejam movidos por motores eléctricos. Adicionalmente, para aumentar a segurança dos passageiros, determina-se que seja limitado o número de horas acumuladas que um condutor pode estar a conduzir um destes veículos.
Enquanto esta medida trará benefícios à cidade e ao sector do turismo, a mesma vem colocar novos desafios à empresa Taco-a-Taco. Esta empresa explora uma frota de tuk tuks e adaptou o modelo de negócio da UBER ao seu universo de operação, sendo que as reservas de tuk tuks são todas feitas remotamente, via internet ou telefone.
[pic 3]
A par dos custos acrescidos que a substituição dos tuk tuks vai envolver, o grande problema que resta em aberto é como explorar de forma eficaz a frota perante as novas condicionantes:
[pic 4][pic 5]
Cada condutor tem de terminar a sua jornada de trabalho antes de ultrapassar o limite diário de tempo acumulado de condução; por outro lado, por serem eléctricos, os veículos têm uma autonomia mais reduzida tendo de ser recarregados com frequência e tomando essa recarga mais tempo do que era o caso com o abastecimento de gasolina para os antigos motores de combustão.
Aplicação a desenvolver
Objetivo
Com uma finalidade pedagógica, usando Python 2.7, neste projeto vai implementar o software tacoAtaco. É um software que apoia a gestão de uma frota de veículos e vai ser usado pela empresa Taco-a-Taco para gerir os seus tuk tuks e a sua equipa de condutores.
Funcionalidade
O seu programa recebe listagens dos condutores, dos veículos e dos serviços relativos a um período. Recebe ainda uma lista de reservas de serviços para serem realizados logo que for possível, a partir do início do período imediatamente a seguir.
O seu programa entrega uma lista atualizada, incluindo a indicação de que condutores e veículos foram atribuídos a que clientes, entre outros elementos. O objectivo é minimizar o tempo de espera dos clientes pelo serviço contratado, assegurar o maior número de horas de atividade ao maior número de colaboradores na equipa, evitar entrar em contravenção (i.e. ter condutores a conduzir para lá do limite de horas permitido), e evitar incumprimento dos serviços (i.e. que um serviço termine intempestivamente antes do final programado por falta de carga na bateria).
Entrada
O programa recebe ficheiros com uma estrutura interna para arrumação de informação similar à dos seguintes exemplos fragmentários:
drivers1315.txt Company:[pic 6]
taco-a-taco
Day: 09:11:2015
Period:
13:00 - 15:00
Drivers:
Ana Tavares, 09:25, 04:50
Catarina Correia, 12:00, 01:45
...
Steven Neale, 09:00, 02:25
vehicles1315.txt Company:[pic 7]
taco-a-taco
Day: 09:11:2015
Period:
13:00 - 15:00
Vehicles:
- BB-99, lambretta GX, 175, 70
17-GD-86, lambretta GX, 175, 15
...
- BH-87, piaggio LT, 130, 80
services1315.txt Company:[pic 8]
taco-a-taco
Day: 09:11:2015
Period:
13:00 - 15:00
Services:
Daniel Pereira, 17-GD-86, Stephan Khal, 12:30, 13:15, alfama, 50, charges Steven Neale, 05-BB-99, Giorgio Rossi, 13:00, 13:30, baixa, 25, standby
...
Nuno Sousa, 17-GD-87, Charles Simpson, 14:45, 17:15, sintra, 80, standby
reservations1517.txt Company:[pic 9]
taco-a-taco
Day: 09:11:2015
Period:
15:00 - 17:00
Reservations:
Conchita Suarez, 15:00, 15:45, baixa, 25
Franz Muller, 15:15, 16:45, belem, 40
...
John Stuart, 16:00, 16:05, castelo, 20
Saída
O programa produz um ficheiro de output com estrutura interna similar ao exemplo services1315.txt acima com uma listagem de serviços atualizada para o período a que dizem respeito as reservas e de acordo com a especificação geral abaixo e com os contratos das funções.
Especificação geral
- O horário diário de funcionamento dos serviços prestados pela companhia é das 9h00 às 21h00.
- Para um dado condutor, 5 horas acumuladas de condução é o máximo diário permitido.
- Um condutor mantém um mesmo veículo até sair de serviço nesse dia.
- Para um dado veículo, o tempo de duração da sua bateria quando totalmente carregada depende do seu modelo e é um dos elementos indicados na listagem de veículos.
- Para qualquer veículo, 1 hora é o tempo invariável necessário para o seu condutor encontrar um ponto de recarga, recarregar totalmente a sua bateria e estar de novo ao serviço.
- As diferentes listagens (condutores, veículos, serviços, reservas) são guardadas em ficheiros.
- Cada listagem diz respeito a um período de 2 horas.
- Cada listagem começa com um cabeçalho que contém a indicação da empresa, do dia da operação e do período da operação, como neste exemplo:
Company: taco-a-taco Day: 09:11:2015
Period:
13:00 - 15:00
- Na listagem de condutores, a seguir ao cabeçalho, cada linha corresponde a um condutor (cujos elementos informativos estão separados por vírgulas) estando a listagem ordenada por ordem alfabética do nome do condutor. Cada condutor é caracterizado pelo nome (e.g. Daniel Pereira), hora de início da atividade nesse dia (e.g. 09:15), e tempo acumulado de atividade, já incluindo todo o tempo de atividade que lhe estiver atribuído a partir do início do período em causa (e.g. 04:15), como ilustrado no seguinte exemplo:
Daniel Pereira, 09:15, 04:15
Toma-se por garantido que na listagem de condutores não há mais condutores que veículos na frota.
- Na listagem de veículos, a seguir ao cabeçalho, cada linha corresponde a um veículo (cujos elementos informativos estão separados por vírgulas) estando a listagem ordenada por ordem alfabética da matrícula do veículo. Cada veículo é caracterizado pela matrícula (e.g. 05-BB-99), modelo (e.g. lambretta GX), autonomia em quilómetros para uma carga completa da bateria (e.g. 175), quilómetros percorridos desde a última carga completa da bateria, já incluindo todos os quilómetros a partir do início do período em causa (e.g. 55), como ilustrado no seguinte exemplo:
05-BB-99, lambretta GX, 175, 55
- Na listagem de serviços, a seguir ao cabeçalho, cada linha corresponde a um serviço (cujos elementos informativos estão separados por vírgulas) estando a listagem ordenada por ordem crescente da hora de fim dos serviços. Cada serviço é caracterizado pelo nome do condutor (e.g. Ana Tavares), matrícula do veículo (e.g. 45-CH-70), nome do cliente (e.g. Jack Wilson), hora de início do serviço (e.g. 13:10), hora de fim do serviço (e.g. 14:10), circuito (e.g. castelo), quilómetros a percorrer no serviço (e.g. 45), e a indicação de standby vs. charges vs. terminates se ao final desse serviço, respetivamente, o condutor aguarda serviço (standby), o condutor e o veículo devem sair de serviço temporariamente para a bateria ser carregada (charges), ou o condutor termina a sua atividade nesse dia (terminates), como ilustrado no seguinte exemplo:
Ana Tavares, 45-CH-70, Jack Wilson, 13:10, 14:10, castelo, 45, terminates
Marisa Campos, 39-TX-28, _no_client_, 14:35, 14:35,
_no_circuit_, 0, standby
O regresso à atividade de um condutor e seu veículo depois de recarga da bateria é representada como no seguinte exemplo:
Marisa Campos, 39-TX-28, _no_client_, 14:35, 14:35,
...