Para tentar incentivar mais vendas de títulos diferentes de uma popular série de 5 livros, uma livraria decidiu oferecer descontos na compra de vários livros.
Um exemplar de qualquer um dos cinco livros custa $8.
Se, no entanto, você comprar dois livros diferentes, ganha 5% de desconto nesses dois livros.
Se você comprar 3 livros diferentes, ganha 10% de desconto.
Se você comprar 4 livros diferentes, ganha 20% de desconto.
Se você comprar os 5, ganha 25% de desconto.
Repare que, se você comprar quatro livros, dos quais 3 são títulos diferentes, ganha 10% de desconto nos 3 que formam um conjunto, mas o quarto livro ainda custa $8.
Sua missão é escrever código para calcular o preço de qualquer cesta de compras imaginável (contendo apenas livros da mesma série), dando o maior desconto possível.
Por exemplo, quanto custa esta cesta de livros?
Uma forma de agrupar esses 8 livros é:
Isso daria um total de:
Resultando em:
O que dá $51.60.
No entanto, outra forma de agrupar esses 8 livros é:
Isso daria um total de:
Resultando em:
O que dá $51.20.
E $51.20 é o preço com o maior desconto.
Este exercício define um Subtipo chamado Book, para os números naturais de 1 a 5.
Um Subtipo pode ser pensado como um par ⟨x, h⟩, em que x é o valor e h é a prova de sua validade.
O valor dentro de um Subtipo (x, neste caso) pode ser acessado usando .val, por exemplo, x.val.
Sua prova pode ser acessada usando .property, por exemplo, x.property.
Os dois também podem ser acessados por pattern matching, como de costume.
Crie sua conta no Exercism para aprender e dominar Lean com 100 exercícios e mentoria humana de verdade, tudo de graça.