Nesta tarefa, vamos implementar um simulador de leilões. O seu programa fará o papel do leiloeiro, anunciando o valor mínimo e acompanhando os lances. Em caso de pausa, seu programa deverá indicar qual é a maior oferta até o momento e incentivar novos lances. Ao final, deverá revelar quem venceu o leilão e por qual valor.
Ofertas menores do que o lance mínimo ou menores do que a maior oferta até o momento serão ignoradas pelo leiloeiro. Desta forma, se um cliente propuser um valor, uma outra oferta dele com valor mais baixo não terá efeito. Uma oferta com valor igual ao do maior lance até o momento também será ignorada pelo leiloeiro.
A entrada do seu programa será composta pelo lance mínimo seguido
por pares de linhas indicando nome do participante e valor da
oferta. Eventualmente, aparecerá a palavra PAUSA
. Ao
término da simulação, aparecerá a palavra FIM
. Observe a
sequência abaixo:
<lance_minimo>
<nome_cliente1>
<oferta_cliente1>
<nome_cliente2>
<oferta_cliente2>
...
PAUSA
<nome_clientek>
<oferta_clientek>
...
FIM
Os arquivos de entrada devem respeitar as seguintes restrições:
Todas as entradas contêm pelo menos o lance mínimo e a palavra FIM
.
A palavra PAUSA
pode aparecer zero ou mais vezes na entrada.
Após o nome de um cliente, a próxima linha conterá o valor de sua oferta.
A primeira linha da saída será o anúncio do lance mínimo na forma:
Lance minimo: R$ <lance_minimo>.
Ao ler a palavra PAUSA
na entrada:
Caso nenhum participante tenha proposto um valor maior ou igual ao lance mínimo, o seu programa deverá emitir a mensagem:
Alguem oferece o lance minimo?
Caso contrário:
Maior oferta ate agora: R$ <maior_oferta>. Alguem oferece mais?
Ao ler a palavra FIM
na entrada, o seu programa deverá emitir a mensagem tradicional:
Dou-lhe uma, dou-lhe duas, dou-lhe tres!
Caso nenhum participante tenha proposto um valor maior ou igual ao lance mínimo, seu programa finalizará com:
O item nao foi vendido. Anunciaremos novo leilao em breve.
Caso contrário:
Vendido para <nome_cliente_oferta_maxima> por R$ <oferta_maxima>!
Reveja, se necessário, as dicas de Formatação em Python.
Veja o exemplo de entrada/saída abaixo. Algumas linhas em branco foram inseridas para facilitar a visualização do comportamento do programa ao longo do tempo.
Entrada | Saída |
---|---|
|
|
Esta tarefa foi projetada para ser resolvida sem a utilização de estruturas mais avançadas como listas e tuplas. Apenas o nome do cliente que fez a maior oferta e o valor desta oferta precisam ser armazenados ao longo da execução do programa.
Se você quiser, pode armazenar os lances lidos em uma lista e pode
usar tuplas para os pares (<nome_cliente>,
<oferta_cliente>)
, mas deve estar ciente que seu programa
precisará de mais memória e executará mais operações do que a versão
citada acima.
Como sempre, criamos um conjunto de testes com arquivos de
entrada arq<i>.in
e para cada um deles temos uma
saída esperada arq<i>.res
. Consulte os arquivos
para ver os dados dos testes abertos. Note a variação entre os testes:
alguns não contêm a palavra PAUSA, outros contêm as ofertas fora de ordem e
outros não contêm lances acima do mínimo. Teremos oito testes abertos e dois testes fechados.
Releia, se necessário, as instruções para fazer os testes em Testes com o SuSy.
Veja aqui a
página de submissão da tarefa. O arquivo a ser
submetido deve se chamar lab06.py. No
link Arquivos
auxiliares há um
arquivo aux06.zip
que
contém todos os arquivos de testes abertos, seus respectivos
resultados compactados e scripts para facilitar os testes.
O limite máximo será de 20 submissões. Serão considerados os resultados da última submissão.
O peso desta tarefa é 3.
O prazo final para submissão é 28/04/2019. Sugerimos que esta tarefa seja realizada antes da Prova 1.
A nota desta tarefa é proporcional ao número de testes que executaram corretamente, desde que o código esteja coerente com o enunciado. A submissão de um código que não implementa o algoritmo requisitado, mas que exibe as saídas esperadas dos testes abertos a partir da comparação de trechos da entrada será considerada fraude e acarretará a atribuição de nota zero à média final da disciplina.