Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Javascript

जावास्क्रिप्ट में बटरफ्लाई शफल कैसे करें?

<घंटा/>

जावास्क्रिप्ट में एक तितली फेरबदल सरणी संख्याओं की एक सरणी है जिसे इस तरह क्रमबद्ध किया जाता है कि जैसे ही हम सरणी के केंद्र में पहुंचते हैं और जैसे-जैसे हम सरणी के अंत तक पहुंचते हैं, संख्या घटती जाती है। सबसे बड़ी संख्या को पहले सूचकांक में रखा गया है।

बटरफ्लाई शफ़ल्ड एरे का एक और रूपांतर है जहाँ संख्याएँ केंद्र की ओर बढ़ती हैं और अंत की ओर घटती हैं। इस मामले में सबसे छोटी संख्या को पहले सूचकांक में रखा गया है।

जो लोग गणित की पृष्ठभूमि से आते हैं, उनके लिए यह कुछ हद तक गुआसी और वितरण से संबंधित है।

उदाहरण

मान लीजिए हमारे पास यह सरणी है -

const arr = [8,2,6,3,9,1,4,5,0,7];

अगर हम इसमें बटरफ्लाई शफलिंग लागू करते हैं, तो आउटपुट होगा -

[9, 7, 5, 3, 1,0, 2, 4, 6, 8]

देखें कि सबसे बड़ी और दूसरी सबसे बड़ी संख्या को अंतिम छोर पर और सबसे छोटी संख्या को केंद्र में कैसे रखा जाता है।

एक और संभावना हो सकती है -

[0, 2, 4, 6, 8, 9, 7, 5, 3, 1]

हमारा काम एक फ़ंक्शन लिखना है जो संख्याओं की एक सरणी और एक स्ट्रिंग को दूसरे तर्क के रूप में लेता है, स्ट्रिंग दो मानों में से कोई भी 'asc' या 'des' ले सकती है। -

  • यदि स्ट्रिंग 'des' है तो हमें बढ़ते हुए घटते क्रम में सरणी को फेरबदल करना होगा।

  • यदि यह 'asc' है तो हमें घटते क्रम में सरणी को फेरबदल करना होगा।

दृष्टिकोण

  • यदि स्ट्रिंग 'asc' है तो हम शुरू में सरणी को आरोही क्रम में क्रमबद्ध करते हैं अन्यथा अवरोही क्रम में। तो, मान लें कि फ़ंक्शन को 'asc' के साथ बुलाया गया था, तो सरणी अब इस तरह दिखेगी -

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • फिर हम सरणी को दो सरणियों में विभाजित करते हैं जैसे कि आसन्न तत्वों को विपरीत सरणियों में वितरित किया जाता है। हम तत्वों को एक सरणी में धकेलते हैं जबकि हम उन्हें दूसरे में अनशिफ्ट करते हैं, ताकि एक सरणी हमें मैन्युअल रूप से ऐसा किए बिना उलट जाए।

इस प्रकार बनने वाली दो सरणियाँ इस प्रकार दिखाई देंगी -

[ 0, 2, 4, 6, 8 ] [ 9, 7, 5, 3, 1 ]
  • अब अंतिम चरण इन सरणियों को जोड़ना है और उसके बाद हमें अपनी आवश्यक सरणी मिल जाएगी। कोड डालने पर यह सब कुछ इस तरह दिखेगा -

उदाहरण

const array = [8,2,6,3,9,1,4,5,0,7];
const butterflyShuffle = (array, order = 'asc') => {
   //creating a new copy of array so that we dont mutate the original
array
   const arr = array.slice();
   //sorting ascending or descending based on the argument
   arr.sort((a, b) => order === 'asc' ? a-b : b-a);
   const first = [], second = [];
   //this variable will later help in determining which array is to be
reversed
   //and which one is to be concatenated to which
   //if length is even, it means that last element will go in second array
   //otherwise it will go in first array
   const isEven = arr.length % 2 === 0;
   for (let i = 0; i < arr.length; i++){
      if(i % 2 === 0){
         isEven ? first.push(arr[i]) : first.unshift(arr[i]);
         continue;
      };
      isEven ? second.unshift(arr[i]) : second.push(arr[i]);
   };
   return isEven ? second.concat(first) : first.concat(second);
};
console.log(butterflyShuffle(array));
console.log(butterflyShuffle(array, 'des'));

आउटपुट

कंसोल में आउटपुट होगा -

[
   9, 7, 5, 3, 1,
   0, 2, 4, 6, 8
]
[
   0, 2, 4, 6, 8,
   9, 7, 5, 3, 1
]

  1. जावास्क्रिप्ट में ऐरे को सेट में कैसे बदलें?

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

  1. जावास्क्रिप्ट में आईडी द्वारा वस्तुओं की सरणी कैसे समूहित करें?

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

  1. जावास्क्रिप्ट सरणी को सी # सरणी में कैसे परिवर्तित करें?

    मान लें कि हमारी जावास्क्रिप्ट सरणी है - <script>    var myArr = new Array(5);    myArr[0] = "Welcome";    myArr[1] = "to";    myArr[2] = "the";    myArr[3] = "Web";    myArr[4] = "World&qu