each_cons() - रूबी
each_cons() एन्यूमेबल की विधि रूबी में एक अंतर्निहित विधि है जो हर बार प्रत्येक तत्व से शुरू होने वाले लगातार एन तत्वों के लिए पुनरावृत्त होती है। यदि कोई ब्लॉक नहीं दिया गया है, तो यह एन्यूमरेटर लौटाता है।
JS प्रत्येक_कॉन्स के बराबर ()
मान लीजिए कि हमारे पास संख्या शाब्दिकों की एक सरणी है (इस मामले में रूबी की गणना के बराबर जेएस), प्रत्येक_कॉन्स फ़ंक्शन को एक ऐरे फ़ंक्शन माना जाता है जो सरणी के प्रत्येक तत्व के लिए निष्पादित होता है और संख्या एन (एन <=सरणी की लंबाई) को स्वीकार करता है केवल तर्क। और सभी तत्वों से एक-एक करके शुरू होने वाले प्रत्येक उप-सरणी के साथ आकार N के उप-सरणी के साथ एक सरणी देता है।
इसका एक उदाहरण चीजों को थोड़ा स्पष्ट कर देगा।
मान लीजिए हमारे पास इस तरह की एक सरणी है -
const arr =[1, 2, 3, 4, 5];console.log(arr.eachCons(2));
प्रत्येक कॉन्स के लिए यह कॉल क्या करता है, यह इस तरह के 2 तत्वों के साथ सरणियों की एक सरणी बनाता है -
[[1, 2], [2, 3], [3, 4], [4, 5]]
ध्यान दें कि जब तक हम ऐसा नहीं कर सकते, तब तक मूल सरणी के प्रत्येक तत्व के लिए उप-सरणी बनाए जाते हैं।
यदि N का मान 2 के बजाय 3 होता, तो परिणाम ऐसा दिखाई देता -
[[1, 2, 3], [2, 3, 4], [3, 4, 5]]
फिर से, सरणी के प्रत्येक तत्व के लिए उप-सरणी बनाई जाती है जब तक कि हमारे पास सरणी में पर्याप्त तत्व न हों।
दृष्टिकोण
हम इस समस्या को हल करने के लिए स्लाइडिंग विंडो एल्गोरिदम का उपयोग करेंगे।
यद्यपि हम इसे दो पंक्तियों में हल करने के लिए आधुनिक ES6 फ़ंक्शन का उपयोग कर सकते हैं, लेकिन बाद वाला दृष्टिकोण बाद वाले की तुलना में बहुत कुशल है।
सबसे पहले, हम थोड़ी देर के लूप का उपयोग करेंगे जो हमारी प्रारंभिक विंडो को 0 से N इंडेक्स तक बनाता है। फिर। हम एक लूप के लिए उपयोग करेंगे जो चलता है जबकि हमारी विंडो का अंत अभी भी मूल सरणी की लंबाई से कम है।
यह लूप हमारी विंडो की स्थिरता की जांच करता है (यानी, हमारी विंडो की लंबाई N के बराबर है)। यदि विंडो स्थिर है, तो हम विंडो को सम्मिलित करते हैं (उस सबएरे को परिणाम सरणी में), इसे इकाई दूरी से दाईं ओर स्लाइड करें और इसे संक्षिप्त करें (यानी, प्रारंभ =अंत)। यदि विंडो अस्थिर है, तो हम इसमें तत्व जोड़ते रहते हैं।
इस दृष्टिकोण के लिए कोड है -
उदाहरण
const arr =[1, 2, 3, 4, 5];const प्रत्येकCons =function(num){ let res =[], temp =[]; चलो शुरू करें =0, अंत =0; जबकि (अंत <संख्या) {temp.push (यह [अंत ++]); }; के लिए (; अंत <=यह लंबाई;) {अगर (अस्थायी लंबाई ===संख्या) {res.push (अस्थायी); प्रारंभ ++; अंत =प्रारंभ; अस्थायी =[]; } अस्थायी [अंत-प्रारंभ] =यह [अंत]; अंत++; } वापसी रेस;}; Array.prototype.eachCons =eachCons;console.log([1, 2, 3, 4, 5].eachCons(1));console.log([1, 2, 3, 4, 5 ].eachCons(2));console.log([1, 2, 3, 4, 5].eachCons(3));console.log([1, 2, 3, 4, 5].eachCons(4) );
आउटपुट
कंसोल में आउटपुट होगा -
<पूर्व>[ [ 1 ], [ 2 ], [ 3 ], [4 ], [ 5 ] [ [ 1, 2 ], [ 2, 3 ], [ 3, 4 ], [ 4, 5 ] ] [ 1, 2, 3 ], [ 2, 3, 4], [3, 4, 5] ][[ 1, 2, 3, 4], [ 2, 3, 4, 5 ] ]