Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> 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

  1. जावास्क्रिप्ट में किसी सरणी से झूठे मान कैसे निकालें?

    Javascript लाइब्रेरी underscore.js प्रदान किया है _.compact() सभी झूठे . को हटाने की विधि एक सरणी में मान। एक सरणी में गलत मान और कुछ नहीं बल्कि NaN, अपरिभाषित, खाली स्ट्रिंग, गलत और 0 हैं। यह एक नया सरणी देता है जो आउटपुट के रूप में झूठे मानों से मुक्त होता है। वाक्यविन्यास _.compact( array )

  1. हम जावास्क्रिप्ट में एक स्ट्रिंग को कितने तरीकों से विभाजित कर सकते हैं?

    जावास्क्रिप्ट में, हम विभाजित . कर सकते हैं 3 तरीकों से एक स्ट्रिंग। एक पुराना तरीका है जिसमें string.split() विधि का उपयोग किया जाता है और बाद में, ES6 ने एक स्ट्रिंग को विभाजित करने के 2 और तरीके प्रदान किए हैं। पहले तरीके में स्प्रेड ऑपरेटर उपयोग किया जाता है और दूसरे तरीके सेarray.from() पद्धत

  1. जावास्क्रिप्ट में एक निर्माता से मूल्य लौटाना?

    जावास्क्रिप्ट में एक कंस्ट्रक्टर से मान वापस करने के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <titl