সমস্যা
ধরা যাক, n জন মানুষ একটি কতারে দাঁড়িয়ে আছে। আমরা নিচের নিয়মে কলা বিতরণ করব –
প্রথম ব্যক্তিকে ১টা কলা, দ্বিতীয়কে ২টা, এভাবে শেষ ব্যক্তিকে n টা কলা দিব।
তারপর আবার কতারের শুরুতে ফিরে প্রথমকে n+1 টা, দ্বিতীয়কে n+2 টা, এভাবে শেষকে 2*n টা কলা দিব।
এই প্রক্রিয়া চলবে (প্রতিবার একটা বেশি কলা দিয়ে, শেষে পৌঁছলে আবার শুরুতে ফিরে) যতক্ষণ না কলা শেষ হয়। শেষ ব্যক্তিটি বাকি সব কলা পাবে।
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা প্রথম আর্গুমেন্ট হিসেবে মানুষের সংখ্যা (num) এবং دوم আর্গুমেন্ট হিসেবে কলার সংখ্যা (m) নেবে। ফাংশনটি একটি অ্যারে রিটার্ন করবে (দৈর্ঘ্য num, সমষ্টি m) যা ফাইনাল বিতরণ দেখাবে।
উদাহরণস্বরূপ, ইনপুট যদি হয় –
const num = 3; const m = 10;
তবে আউটপুট হবে –
const output = [5, 2, 3];
আউটপুট ব্যাখ্যা:
প্রথম টার্নে res[0] += 1, অ্যারে [1,0,0]।
দ্বিতীয় টার্নে res[1] += 2, অ্যারে [1,2,0]।
তৃতীয় টার্নে res[2] += 3, অ্যারে [1,2,3]।
চতুর্থ টার্নে res[0] += 4, ফাইনাল অ্যারে [5,2,3]।
উদাহরণ
কোডটি নিচের মতো –
const num = 3; const m = 10; const distributeBananas = (num = 1, m = 1) => { const res = new Array(num).fill(0); let curr = 1; while(true){ for(let i = 0; i < num; i++){ if(m < curr){ res[i] += m; return res }; res[i] += curr; m -= curr; curr++; }; }; }; console.log(distributeBananas(num, m));আউটপুট
কনসোলে আউটপুট হবে –
[5, 2, 3]