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

জাভাস্ক্রিপ্টে অ্যারে গুচ্ছ থেকে সব কোম্বিনেশন বের করা

একটি অ্যারে দেওয়া আছে। তার উপাদানগুলো দিয়ে সম্ভব সব কোম্বিনেশন (কনকার্টেনেশন/পারমুটেশন উইথ রিপিটিশন) বের করতে হবে।

উদাহরণ কোড

function combination(values) {
  function * combinationRepeat(size, v) {
    if (size)
      for (var chr of values)
        yield * combinationRepeat(size - 1, v + chr);
    else yield v;
  }
  return [...combinationRepeat(values.length, "")];
}

var output = combination([4,5]);
console.log(output);

চলানো পদ্ধতি

প্রোগ্রামটি রান করতে নিচের কমান্ড ব্যবহার করুন:

node fileName.js

এখানে ফাইল নাম demo306.js।

আউটপুট

PS C:\Users\Amit\javascript-code> node demo306.js
[ '44', '45', '54', '55' ]

ব্যাখ্যা

  • combinationRepeat একটি জেনেরেটর ফাংশন (generator function) যা রিকার্সিভলি কোম্বিনেশন তৈরি করে।
  • yield* দিয়ে নেস্টেড জেনেরেটর ডেলিগেট করা হয়।
  • size প্যারামিটার নির্দেশ করে কত লেন্থের কোম্বিনেশন বানাবে (এখানে ইনপুট অ্যারের দৈর্ঘ্য)।
  • [...combinationRepeat(...)] দিয়ে জেনেরেটর থেকে সব ভ্যালু কালেক্ট করে অ্যারে বানানো হয়।
  • ইনপুট [4,5] দিয়ে ২-ডিজিটের সব কোম্বিনেশন: 44, 45, 54, 55।

স্পষ্টতর সংস্করণ (বिना জেনেরেটর)

function getCombinations(arr, length = arr.length) {
  if (length === 0) return [''];
  const smaller = getCombinations(arr, length - 1);
  const result = [];
  for (const item of arr) {
    for (const combo of smaller) {
      result.push(item + combo);
    }
  }
  return result;
}

console.log(getCombinations([4, 5])); // ['44', '45', '54', '55']
console.log(getCombinations(['a', 'b', 'c'], 2)); // ['aa','ab','ac','ba','bb','bc','ca','cb','cc']

কার্টেসিয়ান প্রোডাক্ট (Cartesian Product) - আধুনিক পদ্ধতি


const cartesian = (...arrays) => arrays.reduce((a, b) => a.flatMap(x => b.map(y => [...x, y])), [[]]);

console.log(cartesian([4,5], [4,5])); 
// [[4,4], [4,5], [5,4], [5,5]]
  1. জাভাস্ক্রিপ্ট Array some() ফাংশন

  2. জাভাস্ক্রিপ্টে অ্যারে রিডিউস করা (reduce)

  3. জাভাস্ক্রিপ্ট অ্যারেতে সব ইউনিক ভ্যালু বের করা

  4. জাভাস্ক্রিপ্টে স্ট্রিংয়ের সব সম্ভাব্য কম্বিনেশন জেনারেট করা