फैंसी स्ट्रिंग बदलें


16

चलो S, aऔर bप्रत्येक एक स्ट्रिंग का प्रतिनिधित्व करते हैं

लक्ष्य: एक मानक स्ट्रिंग बदलें फ़ंक्शन लिखें जहां आप aएक स्ट्रिंग के सभी आवृत्तियों को इतने लंबे समय के Sसाथ बदलते हैं जो पहले से ही एक इंस्टेंस का हिस्सा नहीं हैbab

उदाहरण के लिए, यदि हमारे पास स्ट्रिंग है S=My oh my that there is a big ol' that

और हम एक कल्पना के साथ बदलें करना चाहता था a = thatऔर b = that thereहम के प्रत्येक उदाहरण की जगह लेंगे thatसाथ that thereके कहने के रूप में लंबे समय के रूप thatमें पहले से ही का एक उदाहरण नहीं हैthat there

तो इस मामले में आउटपुट होगा: My oh my that there is a big ol' that there

पहले thatको प्रतिस्थापित नहीं किया गया क्योंकि यह पहले से ही एक उदाहरण का हिस्सा हैthat there

टिप्पणियाँ

  • सभी 3 इनपुट में केवल मुद्रण योग्य एएससीआई अक्षर वाले तार होने चाहिए

  • इनपुट 3 अलग स्ट्रिंग्स या 3 स्ट्रिंग्स की सूची के रूप में दिया जा सकता है

  • इनपुट के क्रम में हो जाएगा S, a, bजब तक अन्यथा जवाब में निर्दिष्ट

  • का aएक हिस्सा माना bजाने के लिए, उदाहरण के सभी उदाहरणों का aहिस्सा होना चाहिएb

कुछ कॉर्नर मामलों की व्याख्या की

Input:  ["1222", "22", "122"]
Output: "12122"

उदाहरण के ऊपर के मामले में बाद 22को बदल दिया जाता है। हालांकि इसका एक हिस्सा इसका उदाहरण है b, लेकिन इसका पूरा हिस्सा इसके उदाहरण का हिस्सा नहीं है b। के बाद से की पूरी उदाहरण aका एक उदाहरण का हिस्सा नहीं है bयह बदल दिया है।

Input:  ["123 ", "23", "12"]
Output: "112 "

यह परीक्षण मामला ऊपर के समान मामले को दिखाता है लेकिन शायद थोड़े अधिक स्पष्ट तरीके से। फिर 2बीच में का एक उदाहरण के दोनों हिस्सा है aका एक उदाहरण के रूप में अच्छी तरह हिस्सा bहै, तथापि के बाद के सभी aउदाहरण के हिस्से का नहीं है bयह अभी भी बदल दिया है।

Input: ["Empty", "", "p"]
Output: "pEpmptpyp"

उपरोक्त परीक्षण मामले में पहले और बाद में दोनों खाली स्ट्रिंग को pप्रतिस्थापित नहीं किया जा सकता है, जिसे पूरी तरह से उदाहरण के रूप में माना जा सकता है p

अन्य परीक्षण मामले

Input:  ["aabbaa", "aa", "aabb"]
Output: "aabbaabb"

Input:  ["Hello World!", "o", " no"]
Output: "Hell no W norld!"

Input: ["Wow, oh wow, seriously WOW that's... wow", "wow", "WOW,"]
Output: "Wow, oh WOW,, seriously WOW that's... WOW,"

Input: ["Empty", "", "b"]
Output: "bEbmbpbtbyb"

Input: ["Empty", "b", "br"]
Output: "Empty"

Input: ["Empty", "pty", "Empty"]
Output: "Empty"

Input:  ["aabbaaa", "aa", "PP"]
Output: "PPbbPPa"

Input:  ["121212","1","121"]
Output: "121212"

यह कोड-गोल्फ के लिए एक प्रश्न है, इसलिए बाइट्स जीत में सबसे छोटा उत्तर है।


जवाबों:


6

पर्ल 6 , 76 बाइट्स

{$^b;$^a;&{S:g/$a<?{$!=$/;all m:ex/$b/>>.&{$!.to>.to||.from>$!.from}}>/$b/}}

इसे ऑनलाइन आज़माएं!

अनाम कोड ब्लॉक, जो इनपुट क्यूरेड लेता है, जैसे f(a,b)(s)

मुझे पूरा यकीन है कि यह सवाल के इरादे से मेल खाता है। मूल रूप से, यह केवल स्थानापन्न बनाता है अगर की स्थिति अतिव्यापी मैचों में से aकिसी के भीतर नहीं है ।b


2
हालांकि परीक्षणों में 2p है: pEpmpptpypइसके बजायpEpmptpyp
Nahuel Fouilleul

@ नहुएल फिक्स्ड। यह अन्य परीक्षण मामलों को भी संभालना चाहिए (और मुझे लगता है कि ऐसा करने वाला पहला व्यक्ति है)
जो किंग

परीक्षण मामलों ने बताया के कुछ पुनर्विचार के बाद दुर्भाग्य से @JoKing, मुझे लगता है कि पिछले परीक्षण का मामला असफल हो जायेगी [ 1222, 22, 122] -> 12122। मैंने स्पष्ट करने और माफी मांगने के लिए सवाल को अपडेट किया है कि मैंने इस कोने के मामले को पहले स्पष्ट नहीं किया था।
क्विन

मैं एक समान मुद्दा था s/(?!$b)$a/$b/g, जब $ a खाली है क्योंकि खाली स्ट्रिंग के बाद मुझे ज़रूरत pथी मेल (?!p)(?<!p)(?!p)
खा रहा है

1
@ क्विक फिक्स्ड मुझे लगता है?
जो किंग

5

चारकोल , 55 बाइट्स

≔⁰εF⌕AθηF‹‹ιε⬤⌕Aθζ∨‹ικ›⁺ιLη⁺κLζ«≔⁺⁺ω✂θει¹ζω≔⁺ιLηε»⁺ω✂θε

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

≔⁰ε

एक वैरिएबल को दिखाने के लिए कि अंतिम बदला हुआ मैच कहां समाप्त हुआ।

F⌕Aθη

के सभी ओवरलैपिंग मिलान खोजें aमें S

F‹‹ιε

यदि अगला मैच अंतिम सफल प्रतिस्थापन को ओवरलैप नहीं करता है ...

⬤⌕Aθζ∨‹ικ›⁺ιLη⁺κLζ«

... और इसकी भी कोई प्रति ओवरलैप नहीं bहोती S...

≔⁺⁺ω✂θει¹ζω

... फिर अंतिम मैच और bआउटपुट स्ट्रिंग के साथ इस मैच के बीच के इंटरमीडिएट को बदलें ...

≔⁺ιLηε

... और इस नए मैच के अंत में अंतिम मैच अंत चर को अपडेट करें।

»⁺ω✂θε

अंत में, किसी भी शेष पर जोड़ें Sऔर परिणाम आउटपुट करें।


1
@tsh ठीक है यह एक पूरी तरह से फिर से लिखना है, मुझे आशा है कि यह अब सभी संभावित मामलों को कवर करता है ...
नील

1
@ मेरा मानना ​​है कि यह भी मान्य है!
क्विन

@ मेरा मानना ​​है कि यह अब मान्य है।
tsh

@ क्वीन ओह, क्या इससे मुझे अपना जवाब मान्य करने के लिए पहले करना पड़ता है? साफ!
नील

@ नील का मानना ​​है कि जोकिंग का भी एक मान्य उत्तर है
क्विन

3

वोल्फ्राम लैंग्वेज (गणितज्ञ) , 43 122 96 88 बाइट्स

##2~StringReplacePart~Cases[#2~P~#,{a_,b_}/;And@@(#2<b||#>a&@@@P@##2)]&
P=StringPosition

इसे ऑनलाइन आज़माएं!

+79: तय किया जाना चाहिए।

के रूप में बुलाओ f[a,S,b]

                                                                      & (* a function which finds *)
                            #2~P~#,                                     (* the positions {start,end} where a occurs in S *)
                      Cases[       {a_,b_}/;And@@(#2<b||#>a&@@@     )]  (* which are not a subrange of any of the *)
                                                               P@##2    (* positions of b in S, *)
##2~StringReplacePart~                                                  (* and replaces those parts of the string with b *)
P=StringPosition

2
121212, 1, 121 के लिए विफल - 121212
फाल्को

@attinat मेरे लिए तय लगता है!
क्विन

1

पर्ल 5 ( -lpF/;/), 41 बाइट्स

($_,$a,$b)=@F;s/(?<!(?=$b).)(?!$b)$a/$b/g

TIO


[ 1222, ] 22, 122उत्पादन करना चाहिए 12122, लेकिन तुम्हारा आउटपुट11222
Quinn

ठीक है कि समझ में नहीं आया, शायद तय हो गया है, और छोटा है
नाहुएल फूइउल

अरे नहीं, वास्तव में पिछले टेस्ट केस में एक बहुत अधिक 12एस है, मेरे द्वारा किए गए सवाल से यह पता चलता है कि मैंने जितना सोचा था उससे कहीं ज्यादा कठिन था!
क्विन

@Quinn, मुझे लगता है कि यह संगत नहीं है: 123, 23, 12-> 112लेकिन 1212, 1, 121-> 1212(? कारण है कि यह नहीं होना चाहिए 121212)
Nahuel Fouilleul

यह क्या स्पष्ट किया जाना चाहिए है, जिसमें पदों प्रतीत हो रहा है Sके साथ मेल नहीं करना चाहिए bया कौन-सा हिस्सा अगले मैच के लिए देख रहा से पहले छोड़
Nahuel Fouilleul
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.