ট্র্যাক
/
WebAssembly
WebAssembly
/
অনুশীলনী
/
বইয়ের দোকান
বইয়ের দোকান

বইয়ের দোকান

মধ্যম

নির্দেশনা

একটি জনপ্রিয় ৫ বইয়ের সিরিজের বিভিন্ন বইয়ের বিক্রি বাড়ানোর জন্য একটি বইয়ের দোকান একাধিক বই একসাথে কিনলে ছাড় দেওয়ার সিদ্ধান্ত নিয়েছে।

পাঁচটি বইয়ের যেকোনোটির একটি কপির দাম $8.

তবে আপনি যদি দুটি ভিন্ন বই কেনেন, তাহলে ওই দুটি বইয়ের উপর ৫% ছাড় পাবেন।

আপনি যদি ৩টি ভিন্ন বই কেনেন, তাহলে ১০% ছাড় পাবেন।

আপনি যদি ৪টি ভিন্ন বই কেনেন, তাহলে ২০% ছাড় পাবেন।

আপনি যদি পাঁচটি বইয়ের সবগুলো কেনেন, তাহলে ২৫% ছাড় পাবেন।

লক্ষ্য করুন, আপনি যদি চারটি বই কেনেন যার মধ্যে ৩টি ভিন্ন শিরোনামের বই, তাহলে একটি সেটের অংশ হওয়া ওই ৩টি বইয়ের উপর ১০% ছাড় পাবেন, কিন্তু চতুর্থ বইটির দাম তখনও $8.

আপনার কাজ হলো এমন কোড লেখা, যা যেকোনো সম্ভাব্য কেনাকাটার ঝুড়ির (যেখানে কেবল একই সিরিজের বই থাকবে) দাম হিসাব করবে এবং যতটা সম্ভব বড় ছাড় দেবে।

উদাহরণস্বরূপ, বইয়ের এই ঝুড়িটির দাম কত?

  • প্রথম বইয়ের ২টি কপি
  • দ্বিতীয় বইয়ের ২টি কপি
  • তৃতীয় বইয়ের ২টি কপি
  • চতুর্থ বইয়ের ১টি কপি
  • পঞ্চম বইয়ের ১টি কপি

এই ৮টি বই দলবদ্ধ করার একটি উপায় হলো:

  • ৫টি বইয়ের ১টি দল (১ম, ২য়, ৩য়, ৪র্থ, ৫ম)
  • ৩টি বইয়ের ১টি দল (১ম, ২য়, ৩য়)

এতে মোট হবে:

  • ২৫% ছাড়ে ৫টি বই
  • ১০% ছাড়ে ৩টি বই

যার ফলাফল:

  • ৫ × (১০০% - ২৫%) × $8 = ৫ × $6.00 = $30.00, সাথে
  • ৩ × (১০০% - ১০%) × $8 = ৩ × $7.20 = $21.60

যা $51.60-এর সমান।

তবে এই ৮টি বই দলবদ্ধ করার আরেকটি উপায় হলো:

  • ৪টি বইয়ের ১টি দল (১ম, ২য়, ৩য়, ৪র্থ)
  • ৪টি বইয়ের ১টি দল (১ম, ২য়, ৩য়, ৫ম)

এতে মোট হবে:

  • ২০% ছাড়ে ৪টি বই
  • ২০% ছাড়ে ৪টি বই

যার ফলাফল:

  • ৪ × (১০০% - ২০%) × $8 = ৪ × $6.40 = $25.60, সাথে
  • ৪ × (১০০% - ২০%) × $8 = ৪ × $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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।