परिचय
मैं SBU (शॉर्ट लेकिन यूनिक) चुनौतियों का एक बहुत बड़ा प्रशंसक हूं जो हर समय PPCG पर फसल करता है। CUSRS एक प्रणाली है जिसे रिफ्लेक्टर स्ट्रिंग्स के लिए डिज़ाइन किया गया है, एक CUSRS फ़ंक्शन 2 पैरामीटर और आउटपुट 1 स्ट्रिंग लेता है।
चुनौती
निम्नलिखित करने के लिए एक प्रोग्राम, फ़ंक्शन, लैम्ब्डा या स्वीकार्य विकल्प का निर्माण करें:
यह देखते हुए String inputऔर String refactor(उदाहरण के रूप में), refactor inputका उपयोग कर refactorके रूप में इस प्रकार है:
refactorस्ट्रिंग के प्रारूप में होगा ((\+|\-)\w* *)+(regex), उदाहरण के लिए:
+Code -Golf -lf +al
प्रत्येक अनुभाग पर प्रदर्शन करने के लिए एक ताज़ा कार्रवाई है input। प्रत्येक प्रोग्राम में एक पॉइंटर भी होता है।
+ स्ट्रिंग में पॉइंटर्स वर्तमान स्थान पर यह (प्लस के बिना) प्रत्यय लगाएगा और फिर पॉइंटर को 0 पर रीसेट कर देगा।
प्रत्येक ऑपरेशन को inputस्ट्रिंग पर लागू किया जाना चाहिए और परिणाम वापस किया जाना चाहिए।
उदाहरण:
input:
Golf +Code //pointer location: 0
output:
CodeGolf //pointer location: 0
-जब तक यह प्रत्यय नहीं मिलता तब तक स्ट्रिंग के माध्यम से सूचक को बढ़ाएगा। प्रत्यय को स्ट्रिंग से हटा दिया जाएगा और सूचक को हटाए गए पाठ के बाईं ओर छोड़ दिया जाएगा। यदि कोई प्रत्यय नहीं मिला है, तो सूचक स्ट्रिंग के अंत में प्रगति करेगा और वहां छोड़ दिया जाएगा।
input:
Golf -lf //pointer location 0
output:
Go //pointer location 2
उदाहरण
input:
"Simple" "-impl +nip -e +er"
output:
"Sniper"
input:
"Function" "-F +Conj"
output:
"Conjunction"
input:
"Goal" "+Code -al +lf"
output:
"CodeGolf"
input:
"Chocolate" "Chocolate"
output:
"Chocolate" //Nothing happens...
input:
"Hello" "-lo+p +Please" //Spaces are irrelevant
output:
"PleaseHelp"
input:
"Mississippi" "-s-s-i-ppi+ng" //Operations can be in any order
output:
"Missing"
input:
"abcb" "-c -b +d"
output:
"abd"
input:
"1+1=2" "-1+22-=2+=23"
outut:
"22+1=23"
उदाहरण कोड
उदाहरण जावा है, यह बिल्कुल भी गोल्फ नहीं है।
public static String refactor(String input, String swap) {
int pointer = 0;
String[] commands = swap.replace(" ", "").split("(?=[-+])");
for (String s : commands) {
if (s.startsWith("+")) {
input = input.substring(0, pointer) + s.substring(1) + input.substring(pointer, input.length());
pointer = 0;
} else {
if (s.startsWith("-")) {
String remove = s.substring(1);
for (int i = pointer; i < input.length(); i++) {
if (input.substring(i, i + remove.length() > input.length() ? input.length() : i + remove.length()).equals(remove)) {
pointer = i;
input = input.substring(0, i) + input.substring(i + remove.length(), input.length());
break;
}
}
}
}
}
return input;
}
नियम
- स्टैंडर्ड लोफॉल्स लागू होते हैं
- सबसे छोटा कोड, बाइट्स में, जीतता है
aaa -a?
|aaपाइप पॉइंटर होने के साथ।
-यदि प्रत्यय नहीं मिला है तो क्या होगा ?