कहो कि आपके पास एक स्ट्रिंग है जैसे:
abaabbbbbaabba
इनपुट स्ट्रिंग में एक निर्दिष्ट वर्ण दिखाई देने वाले समय की संख्या की गणना करें, लेकिन केवल यदि चरित्र पंक्ति में केवल एक बार प्रकट होता है । उदाहरण के लिए, यदि चरित्र है a
,
abaabbbbbaabba
^ x x ^
कुल 2 होगा ( aa
गणना नहीं होगी क्योंकि a
पंक्ति में दो बार दिखाई देता है)।
यह FizzBuzz से कैसे संबंधित है?
यदि वर्ण पंक्ति में 3 (या एकाधिक 3) बार, या 5 (या 5 में से कई बार) प्रकट होता है, तो काउंटर को इसके बजाय घटाया जाता है। यदि यह 3 और 5 बार दोनों में से एक है , तो काउंटर अभी भी बढ़ा हुआ है। याद रखें कि यदि काउंटर केवल पंक्ति में एक बार दिखाई देता है, तो काउंटर को भी बढ़ा दिया जाता है, और यह अनदेखा कर दिया जाता है यदि चरित्र पंक्ति में किसी अन्य संख्या में दिखाई देता है (ऊपर वर्णित स्थितियों के अलावा)।
पुनः मिलान करने के लिए, यदि स्ट्रिंग मिलान करने के लिए है a
,
input counter (explanation)
a 1 (single occurence)
aaa -1(multiple of 3)
aaaaa -1(multiple of 5)
aaaaaaaaaaaaaaa 1 (multiple of 15)
aa 0 (none of the above)
aba 2 (two single instances)
aaba 1 (one single occurence(+1) and one double occurence(ignored))
aaaba 0 (one single occurence(+1) and one triple (-1)
aaaaaa -1 (six is a multiple of three)
संदर्भ (ungolfed) जावा में कार्यान्वयन:
import java.util.Scanner;
import java.util.regex.*;
public class StrMatcher {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //Scanner to get user input
int total = 0;//Running total of matches
System.out.println("Enter a string: ");
String strBeingSearched = sc.nextLine(); //String that will be searched
System.out.println("Enter string to match with: ");
String strBeingMatched = sc.nextLine(); //Substring used for searching
//Simple regex matcher
Pattern pattern = Pattern.compile("(" + strBeingMatched + ")+");
Matcher matcher = pattern.matcher(strBeingSearched);
while(matcher.find()){ //While there are still matches
int length = matcher.end() - matcher.start();
int numberOfTimes = length/strBeingMatched.length();//Calculate how many times in a row the string is matched
if((numberOfTimes == 1)||((numberOfTimes % 3 == 0) && (numberOfTimes % 5 == 0))){
total++; //Increment counter if single match or divisible by 15
} else if((numberOfTimes % 3 == 0)||(numberOfTimes % 5 == 0)) {
total--; //Decrement counter if divisible by 3 or 5 (but not 15)
}
strBeingSearched = strBeingSearched.substring(matcher.end());
matcher = pattern.matcher(strBeingSearched); //Replace string/matcher and repeat
}
System.out.println(total);
}
}
- खोजे जाने वाले तार की लंबाई कोई भी हो सकती है, लेकिन पैटर्न केवल एक ही वर्ण का होगा।
- न ही स्ट्रिंग में रेगेक्स विशेष वर्ण होंगे।
- यह कोड-गोल्फ है ; बाइट्स जीत में सबसे छोटा कार्यक्रम।
- कोई मानक खामियां नहीं हैं।