ন্যাপস্যাক

ন্যাপস্যাক

কঠিন

ভূমিকা

লাকপা একজন শেরপা পর্বত গাইড ও পোর্টার। কয়েক মাস ধরে সতর্ক পরিকল্পনার পর, লাকপা যে অভিযানের হয়ে কাজ করেন, সেই অভিযানটি এখন রওনা দিতে চলেছে। বেস ক্যাম্পে তিনি যে জিনিসপত্র বহন করে এনেছেন, তার মান তাকে পরিশোধ করা হবে।

তার সামনে অনেকগুলো জিনিস রয়েছে, যার প্রতিটির একটি মান ও ওজন আছে। লাকপা খুশি মনে সব জিনিসই নিয়ে নিতেন, কিন্তু তার ন্যাপস্যাক সীমিত ওজনের বেশি ধারণ করতে পারে না।

নির্দেশনা

আপনার কাজ হলো, ন্যাপস্যাকের বহন ক্ষমতাকে মাথায় রেখে, কোন আইটেমগুলো নিলে তার বেছে নেওয়ার মোট মান সর্বোচ্চ হবে তা নির্ধারণ করা।

আইটেমগুলোকে আইটেমের একটি অ্যারে হিসেবে উপস্থাপন করা হবে। প্রতিটি আইটেমের একটি ওজন ও একটি মান থাকবে। প্রদত্ত সব মানই কঠোরভাবে ধনাত্মক হবে। Lhakpa প্রতিটি আইটেম থেকে মাত্র একটি করে নিতে পারবেন।

উদাহরণস্বরূপ:

Items: [
  { "weight": 5, "value": 10 },
  { "weight": 4, "value": 40 },
  { "weight": 6, "value": 30 },
  { "weight": 4, "value": 50 }
]

Knapsack Maximum Weight: 10

উপরের উদাহরণে, প্রথম আইটেমের ওজন ৫ ও মান ১০, দ্বিতীয় আইটেমের ওজন ৪ ও মান ৪০, এভাবে চলবে। এই উদাহরণে, নিজের মান সর্বোচ্চ করতে Lhakpa-কে দ্বিতীয় ও চতুর্থ আইটেমটি নিতে হবে, যা এই ক্ষেত্রে ৯০। তার ন্যাপস্যাকের ওজনের সীমা ১০ হওয়ায় তিনি ৯০-এর বেশি পেতে পারবেন না।

WebAssembly-সংক্রান্ত নোট

আইটেমগুলো লিনিয়ার মেমোরির মধ্য দিয়ে পাঠানো হয়, যেখানে প্রথম আইটেমটি অফসেট ০-এ থাকে। প্রতিটি আইটেম ৩২-বিট ইন্টিজারের একটি জোড়া হিসেবে উপস্থাপিত হয়। জোড়ার প্রথম সংখ্যাটি ওজন, আর দ্বিতীয়টি মান।

উদাহরণস্বরূপ, দুইটি আইটেমের একটি অ্যারে ভাবুন, যেখানে প্রথমটিতে আছে weight=1, value=2 আর দ্বিতীয়টিতে weight=5, value=8। তাহলে অ্যারেটি মেমোরিতে দেখতে এমন হবে:

| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 |
| - item 1 weight - | -- item 1 value - | - item 2 weight - | -- item 2 value - |
|0x01,0x00,0x00,0x00|0x02,0x00,0x00,0x00|0x05,0x00,0x00,0x00|0x08,0x00,0x00,0x00|

আপনি চাইলে ইনপুটের জন্য ব্যবহৃত লিনিয়ার মেমোরির অ্যাড্রেসগুলো ওভাররাইট করতে পারেন।


সূত্র

Wikipediaলিংকটি নতুন উইন্ডো বা ট্যাবে খোলে
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
WebAssembly Exercism

ন্যাপস্যাক শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, WebAssembly ট্র্যাকের 87টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।