किताबों की एक लोकप्रिय श्रृंखला में 5 किताबें हैं। इस श्रृंखला की अलग-अलग किताबों की बिक्री बढ़ाने के लिए किताबों की एक दुकान ने एक साथ कई किताबें खरीदने पर छूट देने का फैसला किया है।
इन पाँच किताबों में से किसी भी एक किताब की एक प्रति का दाम $8 है।
लेकिन अगर आप दो अलग-अलग किताबें खरीदते हैं, तो उन दोनों किताबों पर 5% छूट मिलती है।
अगर आप 3 अलग-अलग किताबें खरीदते हैं, तो 10% छूट मिलती है।
अगर आप 4 अलग-अलग किताबें खरीदते हैं, तो 20% छूट मिलती है।
अगर आप पाँचों किताबें खरीदते हैं, तो 25% छूट मिलती है।
ध्यान दीजिए कि अगर आप चार किताबें खरीदते हैं, जिनमें से 3 अलग-अलग किताबें हैं, तो आपको उन 3 किताबों पर 10% छूट मिलती है जो एक सेट बनाती हैं, लेकिन चौथी किताब का दाम अब भी $8 ही रहता है।
आपको ऐसा कोड लिखना है जो किसी भी तरह की खरीदारी की टोकरी (जिसमें इसी श्रृंखला की किताबें ही हों) का दाम निकाले और जितनी बड़ी छूट संभव हो, उतनी छूट दे।
उदाहरण के लिए, इन किताबों की टोकरी का दाम कितना है?
इन 8 किताबों को समूहों में बाँटने का एक तरीका यह है:
इससे कुल मिलेगा:
इसका नतीजा:
यानी कुल $51.60।
लेकिन इन 8 किताबों को समूहों में बाँटने का एक और तरीका यह है:
इससे कुल मिलेगा:
इसका नतीजा:
यानी कुल $51.20।
और $51.20 वह दाम है जिस पर सबसे बड़ी छूट मिलती है।
यह अभ्यास 1 से 5 तक की प्राकृतिक संख्याओं के लिए Book नाम का एक सबटाइप परिभाषित करता है।
किसी सबटाइप को एक जोड़ी ⟨x, h⟩ की तरह सोचा जा सकता है, जिसमें x वैल्यू है और h उसकी वैधता का प्रमाण है।
सबटाइप के अंदर की वैल्यू (यहाँ x) को .val इस्तेमाल करके प्राप्त किया जा सकता है, जैसे x.val।
इसकी वैधता का प्रमाण .property इस्तेमाल करके प्राप्त किया जा सकता है, जैसे x.property।
इन दोनों को हमेशा की तरह पैटर्न मैचिंग से भी प्राप्त किया जा सकता है।
Exercism पर साइन अप कीजिए और Lean को 100 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।