हमें एक JavaScript फ़ंक्शन लिखना आवश्यक है जो यह निर्धारित करता है कि हम एक अनुक्रम से मानों के एक समूह को कितने अलग-अलग तरीकों से हटा सकते हैं, मूल अनुक्रम को क्रम में छोड़कर (स्थिर), और यह सुनिश्चित करते हुए कि मूल अनुक्रम से प्रत्येक मान का केवल एक उदाहरण हटाया जाए।
उदाहरण के लिए − यदि अनुक्रम सरणी है −
const arr = [1, 2, 1, 3, 1, 4, 4];
और हटाई जाने वाली सरणी है −
const arr2 = [1, 4, 4];
तो क्रम को बाधित किए बिना ऐसा करने के तीन संभावित तरीके हैं −
1 --> [2, 1, 3, 1] 2 --> [1, 2, 3, 1] 3 --> [1, 2, 1, 3]
इसलिए, हमारे फ़ंक्शन को इन अनुक्रमों के लिए 3 आउटपुट करना चाहिए।
उदाहरण
const arr = [1, 2, 1, 3, 1, 4, 4]; const arr2 = [1, 4, 4]; const possibleRemovalCombinations = (original, part) => { const sorter = (a, b) => a - b; part.sort(sorter); let place = []; part.forEach(el => { place[el] = [] }); original.forEach((el, index) => { if(place[el]){ place[el].push(index); } }); let connection = part.map(el => place[el].slice()); for(let i = 1; i < connection.length; i++){ if (part[i - 1] != part[i]){ continue; } let left = connection[i - 1][0]; while(connection[i][0] <= left){ connection[i].shift(); }; }; for (let i = connection.length - 2; i >= 0; i--) { if(part[i] != part[i + 1]){ continue; } let right = connection[i + 1][connection[i + 1].length - 1]; while(connection[i][connection[i].length - 1] >= right){ connection[i].pop(); }; }; const combineArray = (step, prev, combination) => { for (let i = 0; i < connection[step].length; i++) { let curr = connection[step][i]; if(prev >= curr && original[prev] == original[curr]){ continue; } if(step + 1 == connection.length){ combinations.push(combination.concat([curr])) } else { combineArray(step + 1, curr, combination.concat([curr])); }; }; }; let combinations = [], res = []; combineArray(0, -1, []); for (let i = 0; i < combinations.length; i++) { let copy = original.slice(); combinations[i].forEach(el => copy[el]); res[i] = copy.filter(el => el !== undefined); }; return res.length; }; console.log(possibleRemovalCombinations(arr, arr2));आउटपुट
और कंसोल में आउटपुट होगा −
3