ट्रैक
/
WebAssembly
WebAssembly
/
अभ्यास
/
किताबों की दुकान
किताबों की दुकान

किताबों की दुकान

मध्यम

निर्देश

किताबों की एक लोकप्रिय श्रृंखला में 5 किताबें हैं। इस श्रृंखला की अलग-अलग किताबों की बिक्री बढ़ाने के लिए किताबों की एक दुकान ने एक साथ कई किताबें खरीदने पर छूट देने का फैसला किया है।

इन पाँच किताबों में से किसी भी एक किताब की एक प्रति का दाम $8 है।

लेकिन अगर आप दो अलग-अलग किताबें खरीदते हैं, तो उन दोनों किताबों पर 5% छूट मिलती है।

अगर आप 3 अलग-अलग किताबें खरीदते हैं, तो 10% छूट मिलती है।

अगर आप 4 अलग-अलग किताबें खरीदते हैं, तो 20% छूट मिलती है।

अगर आप पाँचों किताबें खरीदते हैं, तो 25% छूट मिलती है।

ध्यान दीजिए कि अगर आप चार किताबें खरीदते हैं, जिनमें से 3 अलग-अलग किताबें हैं, तो आपको उन 3 किताबों पर 10% छूट मिलती है जो एक सेट बनाती हैं, लेकिन चौथी किताब का दाम अब भी $8 ही रहता है।

आपको ऐसा कोड लिखना है जो किसी भी तरह की खरीदारी की टोकरी (जिसमें इसी श्रृंखला की किताबें ही हों) का दाम निकाले और जितनी बड़ी छूट संभव हो, उतनी छूट दे।

उदाहरण के लिए, इन किताबों की टोकरी का दाम कितना है?

  • पहली किताब की 2 प्रतियाँ
  • दूसरी किताब की 2 प्रतियाँ
  • तीसरी किताब की 2 प्रतियाँ
  • चौथी किताब की 1 प्रति
  • पाँचवीं किताब की 1 प्रति

इन 8 किताबों को समूहों में बाँटने का एक तरीका यह है:

  • 5 किताबों का 1 समूह (पहली, दूसरी, तीसरी, चौथी, पाँचवीं)
  • 3 किताबों का 1 समूह (पहली, दूसरी, तीसरी)

इससे कुल मिलेगा:

  • 5 किताबें, 25% छूट पर
  • 3 किताबें, 10% छूट पर

इसका नतीजा:

  • 5 × (100% - 25%) × $8 = 5 × $6.00 = $30.00, और
  • 3 × (100% - 10%) × $8 = 3 × $7.20 = $21.60

यानी कुल $51.60।

लेकिन इन 8 किताबों को समूहों में बाँटने का एक और तरीका यह है:

  • 4 किताबों का 1 समूह (पहली, दूसरी, तीसरी, चौथी)
  • 4 किताबों का 1 समूह (पहली, दूसरी, तीसरी, पाँचवीं)

इससे कुल मिलेगा:

  • 4 किताबें, 20% छूट पर
  • 4 किताबें, 20% छूट पर

इसका नतीजा:

  • 4 × (100% - 20%) × $8 = 4 × $6.40 = $25.60, और
  • 4 × (100% - 20%) × $8 = 4 × $6.40 = $25.60

यानी कुल $51.20।

और $51.20 वह दाम है जिस पर सबसे बड़ी छूट मिलती है।

WebAssembly के लिए विशेष नोट

WebAssembly एक्सपोर्ट total का फंक्शन सिग्नेचर इस प्रकार है:

(func (export "total")
    (param $basketOffset i32)
    (param $basketLength i32)
    (result i32)
)

दोनों पैरामीटर $basketOffset और $basketLength 32-बिट पूर्णांकों के ऐरे का बेस ऑफसेट और लंबाई बताते हैं। लंबाई वाले पैरामीटर का माप ऐरे में मौजूद एलिमेंट्स की संख्या से तय होता है, बाइट्स से नहीं। इस फंक्शन को कॉल करने से पहले कॉलर इस ऐरे को WebAssembly की लीनियर मेमोरी में लिखता है, और लिखना $basketOffset ऑफसेट से शुरू होता है। WebAssembly की लीनियर मेमोरी हमेशा लिटिल-एंडियन क्रम में होती है।

उदाहरण के लिए, कॉलर टोकरी [1,2] को आठ बाइट के इस क्रम में एनकोड करेगा।

| 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
| --- basket[0] --- | --- basket[1] --- |
,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
WebAssembly Exercism

किताबों की दुकान शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और WebAssembly को 87 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।