কম্পিউটার টিউটোরিয়াল

জাভাস্ক্রিপ্টে N পার্টিশন যেখানে পার্টস সংখ্যা এবং প্রতিটি পার্ট পাওয়ার অফ টু

আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা একটি সংখ্যা গ্রহণ করবে। ফাংশনটি নিচের নিয়মাবলী অনুযায়ী সংখ্যাটি চাঙ্কে ভাগ করবে -

  • চাঙ্কের সংখ্যা পাওয়ার-অফ-টু হবে,
  • প্রতিটি চাঙ্কের আইটেম সংখ্যাও পাওয়ার-অফ-টু হবে (সাইজ मैक्स পাওয়ার অফ টু পর্যন্ত, ১, ২, ৪, ৮, ১৬, ৩২, ৩২ হলো ম্যাক্স)

অতএব, উদাহরণস্বরূপ, ৮ হলে ১ চাঙ্কে -

[8]

৯ হলে -

[8, 1]

এটি কাজ করে কারণ দুটি সংখ্যাও পাওয়ার অফ টু, এবং অ্যারে সাইজ ২ (পাওয়ার অফ টু)।

১১ ট্রাই করি -

[8, 2, 1]

এটি কাজ করে না। কারণ অ্যারে সাইজ ৩ যা পাওয়ার অফ টু নয়, যদিও যোগফল ১১।

[4, 4, 2, 1]

এটি কাজ করে! এতে ৪টি এলিমেন্ট আছে যা পাওয়ার অফ টু।

উদাহরণ

function permuteCombinations(n, maximum){ 
  const maxPowerOf2 = 1 << maximum; 
  const m = ~~(n / maxPowerOf2); 
  const A = new Array(maximum + 1).fill(0); 
  A[maximum] = m; 
  let num = n - m * maxPowerOf2; 
  let p = 0; 
  let bitCount = 0; 
  while (num){ 
    if (num & 1){ 
      bitCount += 1; 
      A[p] = 1; 
    } 
    num >>= 1; 
    p += 1; 
  } 
  const min = m + bitCount; 
  let target = 1; 
  while (target < min) target *= 2; 
  if (target > n) return -1; 
  if (target == min) return A.map((c, p) => [1 << Number(p), c]); 
  if (target == n) return [n]; 
  target = target - min; 
  let i = m ? maximum : p; 
  while (target && i > 0){ 
    if (!A[i]){ 
      i -= 1; 
      continue; 
    } 
    const max = Math.min(target, A[i]); 
    A[i] -= max; 
    A[i-1] += 2*max; 
    target -= max; 
    i -= 1; 
  } 
  return target ? -1 : A.map((c, p) => [1 << Number(p), c]); 
}; 
console.log(permuteCombinations(11, 5));

আউটপুট

কনসোলে আউটপুট হবে -

[ [1, 1], [2, 1], [4, 2], [8, 0], [16, 0], [32, 0] ]
  1. জাভাস্ক্রিপ্টে দুটি স্ট্রিং এনাগ্রাম কিনা চেক করা

  2. জাভাস্ক্রিপ্টে হেক্সে রূপান্তর করে নমেরিক পার্ট সমষ্টি করা

  3. জাভাস্ক্রিপ্টে স্ক্রিন প্রস্থ ও অ্যাসপেক্ট রেশিও দিয়ে উচ্চতা বের করা

  4. জাভাস্ক্রিপ্টে সংখ্যাকে প্রাইম ফ্যাক্টর পাওয়ার ও প্রোডাক্ট আকারে প্রকাশ করা