perl - how to compare 2 overlapping ranges without any repetition -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 2 जवाब
मैं मूल्यों की तुलना करने की कोशिश कर रहा हूं @ Arr3 से लेकर श्रेणी के मूल्यों के साथ @ arr4 से लेकर, लेकिन मुझे वांछित आउटपुट नहीं मिल रहा है कृपया मुझे
3,4,5,6,7,9,10,11,12,14,15 के रूप में आउटपुट प्राप्त करने के लिए निम्न कोड में संशोधनों का सुझाव दें (मूल्यों को दोहराए बिना 5 और 10) और कुल मिलाकर = 11।
फ़ाइल 1: परिणाम
3..7 9 .122 14..17 < P> फ़ाइल 2: एनोटेशन
1..5 5 ..10 10..15
कोड:
#! / यूएसआर / बिन / पर्ल खोलें ($ inp1, "& lt; परिणाम") या मरना "नहीं मिला"; खुला ($ INP2, "& lt; एनोटेशन") या मर "नहीं मिला"; मेरा @ arr3 = & lt; $ inp1 & gt ;; मेरा @ arr4 = & lt; $ inp2 & gt ;; मेरी $ लाइन 1 (@ एआर 4) को अग्रगामी करें (मेरी एक्शन 3 foreach $ 2 @) (मेरी ($ से 1, $ to1) = विभाजन (/ /।। /। /, $ पंक्ति 1); मेरा ($ 2 से, $ से 2) = विभाजन (/ / .../, $ line2); #print $ from1; प्रिंट "\ n"; (अगर $ $ i == $ j) के लिए (मेरी $ i = $ से 1; $ i & lt; = $ to1; $ i ++) {के लिए (मेरी $ j = $ से 2; $ j & lt; = $ to2; $ j ++) {if ($ i == $ j) प्रिंट करें "$ i"; 'यहां कोड दर्ज करें' प्रिंट करें \ n "; }}}}}
यदि आपकी सूचियां बहुत बड़ी नहीं हैं, तो आप एक हैश का उपयोग कर सकते हैं , जो पर्ल में "दोहराए बिना" प्राप्त करने का सर्वोत्तम तरीका है:
#! / Usr / bin / perl चेतावनियों का उपयोग करें; सख्त उपयोग; मेरा @ रुट = ('3. 4', '9..12', '14 ..17 '); मेरा @ ऍनोटेशन = ('1..5', '5..10', '10 ..15 '); मेरी% cmp; मेरा $ पास = 1; मेरी $ श्रेणी के लिए (@ रुट्स, अंडफ, @ ऍनोटेशन) {$ pass = 2, अगला जब तक $ श्रेणी नहीं है; मेरा ($ से $ $) = विभाजित / \ q../, $ range; मेरे $ num ($ से $ $ $) {$ cmp {$ num} = $ pass अगर 1 == $ पास या $ cmp {$ num}; }} My @output = sort {$ a & lt; = & gt; $ B} grep 2 == $ cmp {$ _}, चाबियाँ% cmp; प्रिंट शामिल (',', @output), "\ n पूर्ण मिलान:", स्केलर @आउटपुट, "\ n";
Comments
Post a Comment