Hogy egy népszerű, ötkötetes sorozat különböző könyveiből több példányt adjon el, egy könyvesbolt úgy döntött, hogy kedvezményt ad, ha valaki több könyvet vásárol.
Az öt könyv bármelyikének egy példánya $8-ba kerül.
Ha viszont két különböző könyvet veszel, akkor arra a két könyvre 5% kedvezményt kapsz.
Ha 3 különböző könyvet veszel, 10% kedvezményt kapsz.
Ha 4 különböző könyvet veszel, 20% kedvezményt kapsz.
Ha mind az 5-öt megveszed, 25% kedvezményt kapsz.
Vedd figyelembe, hogy ha négy könyvet veszel, amelyek közül 3 különböző cím, akkor arra a 3-ra, amelyek egy készletet alkotnak, 10% kedvezményt kapsz, a negyedik könyv ára viszont továbbra is $8.
A feladatod, hogy olyan kódot írj, amely kiszámítja bármely elképzelhető bevásárlókosár árát (amelyben csak ugyanannak a sorozatnak a könyvei vannak), a lehető legnagyobb kedvezményt alkalmazva.
Például mennyibe kerül ez a könyvkosár?
Ezt a 8 könyvet az egyik lehetséges módon így csoportosíthatod:
Ez a következő végösszeget adná:
Az eredmény:
Ez összesen $51.60.
Ezt a 8 könyvet viszont másképp is csoportosíthatod:
Ez a következő végösszeget adná:
Az eredmény:
Ez összesen $51.20.
A legnagyobb kedvezményt adva pedig az ár $51.20.
Ez a feladat egy Book nevű Subtype-ot definiál, az 1-től 5-ig terjedő természetes számokhoz.
A Subtype felfogható egy ⟨x, h⟩ párként, ahol x az érték, h pedig az érvényességének bizonyítása.
A Subtype-on belüli értékhez (ebben az esetben x) a .val használatával férhetsz hozzá, például x.val.
A bizonyításához a .property használatával férhetsz hozzá, például x.property.
Mindkettőhöz hozzáférhetsz mintaillesztéssel is, szokás szerint.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Lean nyelvet 100 feladat segítségével, valódi emberi mentorálással, mindez ingyen.