একটি অ্যারে দেওয়া আছে। তার উপাদানগুলো দিয়ে সম্ভব সব কোম্বিনেশন (কনকার্টেনেশন/পারমুটেশন উইথ রিপিটিশন) বের করতে হবে।
উদাহরণ কোড
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]]