हमारे पास y1 और y2 कोऑर्डिनेट्स द्वारा परिभाषित वर्टिकल रीजन्स का एक सेट है, जहां y1 प्रत्येक रीजन का शुरुआती बिंदु है और y2 अंतिम बिंदु है।
हमारे कोऑर्डिनेट सिस्टम का मूल शीर्ष-बाएं कोना है, इसलिए y2 हमेशा y1 से बड़ा होता है।
यह एक उदाहरण है:
const regions = [ [10, 100], [50, 120], [60, 180], [140, 220] ];
हमें एक JavaScript फ़ंक्शन लिखना है जो ऐसा रीजन ऐरे पहले आर्गुमेंट के रूप में और एक नंबर दूसरे आर्गुमेंट के रूप में लेता है।
हम एक निश्चित आकार से बड़े सभी डिस्जॉइंटेड इंटरसेक्शन ढूंढना चाहते हैं (जो फ़ंक्शन के दूसरे आर्गुमेंट द्वारा निर्दिष्ट है)।
मान लीजिए, उदाहरण के लिए, 20 यूनिट्स।
तो उपरोक्त ऐरे के लिए आउटपुट इस तरह दिखना चाहिए:
const output = [ [60, 100], [140, 180] ];
हम एक सरलीकृत एल्गोरिदम का उपयोग कर सकते हैं और ओवरलैपिंग आइटम्स की खोज के लिए क्रॉस प्रोडक्ट का उपयोग कर सकते हैं।
फिर इटरेट करके कॉमन पार्ट्स प्राप्त करें और केवल अननोन मैचों को फ़िल्टर करें।
उदाहरण
इसके लिए कोड होगा:
const regions = [ [10, 100], [50, 120], [60, 180], [140, 220] ]; const getIntersections = (arr,num) => { let disjoint, res; return arr.reduce((acc,val,ind,array) => { if (val.used){ return acc; }; res = array.map((el, index) => array[(ind + index) % array.length]) .reduce((s,e) => { disjoint = [Math.max(s[0],e[0]), Math.min(s[1],e[1])]; return disjoint[0] < disjoint[1] ? (e.used = true, disjoint) : s; }); res[1] - res[0] > num && acc.push(res); return acc; },[]); } console.log(getIntersections(regions, 20));आउटपुट
कंसोल में आउटपुट होगा:
[ [ 60, 100 ], [ 140, 180 ] ]