var string = "3y4jd424jfm

आदर्श रूप से, मैं चाहता हूं कि यह ["3","y","4","j","d","4","24","j","f","m"] हो

लेकिन जब मैं विभाजित होता हूं: string.split(""), 2 और 4 24 में अलग हो जाते हैं। मैं दोहरे अंकों का हिसाब कैसे रख सकता हूं?

संपादित करें: यहां वह प्रश्न है जिसे मैं कोडिंग अभ्यास से हल करने का प्रयास कर रहा था:

जावास्क्रिप्ट भाषा का उपयोग करते हुए, फ़ंक्शन को ईवनपेयर्स (str) पास किए जा रहे स्ट्र पैरामीटर को लें और यह निर्धारित करें कि स्ट्रिंग में कहीं भी आसन्न सम संख्याओं की एक जोड़ी मौजूद है या नहीं। यदि कोई जोड़ी मौजूद है, तो स्ट्रिंग को सही लौटाएं, अन्यथा झूठी वापसी करें। उदाहरण के लिए: यदि str "f178svg3k19k46" है तो स्ट्रिंग के अंत में दो सम संख्याएं हैं, "46" इसलिए आपके प्रोग्राम को स्ट्रिंग को सही लौटाना चाहिए। एक अन्य उदाहरण: यदि str "7r5gg812" है तो जोड़ी "812" (8 और 12) है, इसलिए आपके प्रोग्राम को स्ट्रिंग को सही लौटाना चाहिए।

4
Martina 19 अगस्त 2018, 10:02
5
42, 4 के बजाय इसे 4, 24 क्या बनाता है?
 – 
Ry-
19 अगस्त 2018, 10:03
@ राय- हाँ, यही मुझे भी नहीं मिला। मैं एक कोडिंग अभ्यास कर रहा था और वह एक प्रश्न था। मैं ऊपर दिए गए सटीक प्रश्न को एक संपादन में जोड़ दूंगा।
 – 
Martina
19 अगस्त 2018, 10:25
ओह, इसका मतलब है कि इससे कोई फर्क नहीं पड़ता कि यह उनमें से कौन सा है। आप अंकों के प्रत्येक अनुक्रम पर अलग-अलग विचार करके समस्या को सरल बना सकते हैं - "3", "4", और "424", या "178", "3", "19" , और "46"। देखें कि क्या आप यह पता लगा सकते हैं कि लगातार अंकों की एक स्ट्रिंग में सम संख्याओं का एक युग्म खोजना क्या संभव बनाता है।
 – 
Ry-
19 अगस्त 2018, 10:33
@ Ry- मैंने इसे एक सरणी में विभाजित किया और एक for लूप था और इसमें, मैंने जाँच की कि क्या arr[x] % 2 === 0 && arr[x + 1] % 2 ===0, सही है, लेकिन वह दृष्टिकोण केवल प्रत्येक पूर्णांक को व्यक्तिगत रूप से ध्यान में रखता है
 – 
Martina
19 अगस्त 2018, 10:42
क्या किसी भी उत्तर ने आपकी आवश्यकता को पूरा नहीं किया/आपकी समस्या का समाधान नहीं किया? या आप कुछ और ढूंढ रहे हैं?
 – 
Koushik Chatterjee
4 सितंबर 2018, 15:16

4 जवाब

आप इसके द्वारा एक मंचित दृष्टिकोण अपना सकते हैं

  • किसी सरणी में केवल स्ट्रिंग की संख्या प्राप्त करना
  • स्ट्रिंग की लंबाई से फाइलर,
  • जांचें कि क्या दो अंक सम हैं
function even(n) {
    return !(n % 2);
}

function checkEvenPair(string) {
    return string
        .match(/\d+/g)
        .filter(s => s.length > 1)
        .some(s => 
            [...s].some((c => v => even(v) && !--c)(2))
        );
}

console.log(checkEvenPair('2f35fq1p97y931'));   // false
console.log(checkEvenPair('3y4jd424jfm'));      // true  4  2
console.log(checkEvenPair('f178svg3k19k46'));   // true  4  6
console.log(checkEvenPair('7r5gg812'));         // true  8 12
console.log(checkEvenPair('2f35fq1p97y92321')); // true  (9)2 32

मिलान के लिए केवल सम संख्या लेकर एक नियमित व्यंजक समाधान।

function checkEvenPair(string) {
    return /[02468]\d*[02468]/.test(string);
}

console.log(checkEvenPair('2f35fq1p97y931'));   // false
console.log(checkEvenPair('3y4jd424jfm'));      // true
console.log(checkEvenPair('f178svg3k19k46'));   // true
console.log(checkEvenPair('7r5gg812'));         // true
console.log(checkEvenPair('2f35fq1p97y92321')); // true
2
Nina Scholz 19 अगस्त 2018, 19:44
हालांकि अल्फ़ान्यूमेरिक वर्णों को अलग करना चीजों को नहीं बदलेगा? " str पैरामीटर पारित किया जा रहा है और निर्धारित करता है कि स्ट्रिंग में कहीं भी आसन्न सम संख्याओं की एक जोड़ी मौजूद है या नहीं " यह स्ट्रिंग के भीतर आसन्न सम संख्याओं की तलाश कर रहा है, इसलिए अक्षरों को अलग करना एक दूसरे के बगल में पूर्णांकों को गलत तरीके से रख सकता है, अधिकार?
 – 
Martina
19 अगस्त 2018, 10:51
आपको आसन्न अंकों के साथ एक सरणी मिलती है, जैसे पहली स्ट्रिंग के लिए यह: [ "2", "35", "1", "97", "931"] और फिर सभी आइटम अलग-अलग व्यवहार करते हैं। तो आपको केवल समता के लिए एक अंक और हमेशा अंतिम की जांच करने की आवश्यकता है, क्योंकि अंतिम अंक एक संख्या के लिए तय करता है।
 – 
Nina Scholz
19 अगस्त 2018, 10:53
यदि स्ट्रिंग 2f35fq1p97y92321 है तो इसे सत्य को 2 और 32 या 92 और 32 आसन्न हैं।
 – 
Koushik Chatterjee
19 अगस्त 2018, 19:08
हम्म, अब यह सही लग रहा है, मुझे लगता है कि एक साधारण RegExp 2 बाद के अंकों (या किसी भी अंक से अलग) की जांच करने के लिए बेहतर हो सकता था। वैसे भी आप विभाजन और आगे की कार्रवाइयों के लिए RegExp का उपयोग कर रहे हैं।
 – 
Koushik Chatterjee
19 अगस्त 2018, 19:24

संख्या निकालने के लिए रेगेक्स का प्रयोग करें, फिर चार के लिए निम्नलिखित के रूप में विभाजित करें:

var regex = /\d+/g;
var string = "3y4jd424jfm";
var numbers = string.match(regex); 

var chars = string.replace(/\d+/g, "").split("");

var parts = numbers.concat(chars);

console.log(parts);
1
Mohammad Akbari 19 अगस्त 2018, 11:34

इस उदाहरण से शुरू करते हुए 7r5gg812, उत्तर सत्य है क्योंकि एक-दूसरे के बगल में कुछ सम संख्याएं 8 और 12 हैं।

एक संभावित समाधान स्ट्रिंग पर एक काउंटर के साथ पुनरावृति करना है जो कि जब आप एक समान अंक देखते हैं तो वृद्धि होती है, जब यह अंक नहीं होता है तो 0 पर रीसेट करें। विषम अंकों को केवल अनदेखा किया जाता है:

function EvenPairs(str) { 
  let counter = 0;
  for (let i = 0; i < str.length; i++) {
    if (isNaN(str[i] % 2)) {
      counter = 0;
    } else if (str[i] % 2 === 0) {
      counter++;
    }

    if (counter === 2) {
        return true;
    } 
  }
  return false; 
}

अन्य समाधान, regexps का उपयोग करते हुए:

function EvenPairs(str) { 
    return /\d\d/.test(str.replace(/[13579]/g, ''));
}
0
Maxime Chéramy 19 अगस्त 2018, 10:51

इसके लिए आप RegExp का उपयोग कर सकते हैं, आपको यह जांचने की आवश्यकता नहीं है कि क्या दो संख्याएँ सम हैं, आपको बस दो संवैधानिक वर्णों की जाँच करने की आवश्यकता है (जो कि संख्याएँ हैं) सम हैं। इसलिए 1234 के लिए आपको 12 और 34 की जांच करने की आवश्यकता नहीं है, उस स्थिति में प्रश्न अधिक जटिल हो सकता था (यहां क्या हल किया जाएगा)। आपको बस [1 & 2], [2 & 3], [3 & 4] की जांच करने की जरूरत है, जहां इनमें से कोई भी युग्म भी नहीं है।

और हम स्ट्रिंग को पार्स करने से बच सकते हैं और संख्या के रूप में पढ़ सकते हैं, सम, .. और ऐसी चीजों के लिए अंकगणितीय गणना।

तो, सरल के लिए (संगत भी वर्ण)

सम अंक के लिए रेगेक्स है: /[02468]/

<your string>.match(/[02468]{2}/) आपको परिणाम देगा।

उदाहरण:

function EvenPairs(str) {
  let evensDigit = '[02468]',
      consecutiveEvenRegex = new RegExp(evensDigit + "{2}");
  return !!str.match(consecutiveEvenRegex);
}

let str1 = "f178svg3k19k46"; //should be true as 4 then 6
let str2 = "7r5gg812"; // should be false, as 8 -> 1 -> 2 (and not 8 then 12)

console.log(`Test EvenPairs for ${str1}: `, EvenPairs(str1));
console.log(`Test EvenPairs for ${str2}: `, EvenPairs(str2));

अब वास्तविक (संभावित) समस्या पर वापस 2 संवैधानिक सम संख्याओं की जाँच करने के लिए (न केवल वर्ण) हमें केवल इसके अस्तित्व की जाँच करने की आवश्यकता है:

<any even char><empty or 0-9 char><any even char> यानी /[02468][0-9]{0,}[02468]/

आइए इसके लिए एक कार्यशील उदाहरण बनाएं

function EvenPairs(str) {
  let evenDigit = '[02468]',
      digitsOrEmpty = '[0-9]{0,}',
      consecutiveEvenRegex = new RegExp(evenDigit + digitsOrEmpty + evenDigit);
  return !!str.match(consecutiveEvenRegex);
}

let str1 = "f178svg3k19k46"; //should be true as 4 then 6
let str2 = "7r5gg812"; // should be true as well, as 8 -> 12

console.log(`Test EvenPairs for ${str1}: `, EvenPairs(str1));
console.log(`Test EvenPairs for ${str2}: `, EvenPairs(str2));
0
Koushik Chatterjee 19 अगस्त 2018, 20:06
बीटीडब्ल्यू, एक चरित्र वर्ग में पाइप क्यों? पाइप एक वैध चरित्र होगा।
 – 
Nina Scholz
19 अगस्त 2018, 19:47
उनमें से किसी के साथ मिलान करने के लिए जैसा कि pipe निर्धारित करता है या [] . के अंदर
 – 
Koushik Chatterjee
19 अगस्त 2018, 19:49
एक चरित्र के रूप में पाइप का उपयोग करने के लिए आपको इससे बचना होगा जैसे \|
 – 
Koushik Chatterjee
19 अगस्त 2018, 19:53
एचएम ज़रूरी नहीं। पाइप एक कानूनी चरित्र है। इसे चरित्र वर्ग [...] में भागने की आवश्यकता नहीं है, लेकिन यदि आप इसे या विभाजक के रूप में लेते हैं समूह <कोड>(...)
 – 
Nina Scholz
19 अगस्त 2018, 19:55
बिल्कुल। इसलिए इस संदर्भ में (जैसा कि मैं चार वर्गों के अंदर या ऑपरेटर के रूप में उपयोग कर रहा हूं [...]) यदि आपको इसके अंदर एक पाइप के रूप में चार की आवश्यकता है तो आपको इससे बचने की जरूरत है। हां, सामान्य तौर पर आप सही हैं (मेरा जवाब सामान्य संदर्भ में नहीं था, अगर ऐसा लगता है, तो यह मेरा बुरा है) चार वर्ग के बाहर भी आप पाइप को या के रूप में उपयोग कर सकते हैं।
 – 
Koushik Chatterjee
19 अगस्त 2018, 19:58