प्रोफेसर श्वार्टज़मैन के एक्मे कैनाइन डिकोडर 2000


31

परिचय

हम - विशेष रूप से हमारे बीच में रहने वाले, जो प्रशंसक होते हैं - सभी को यह पुराना दूर का कार्टून याद है :

अरे!  अरे!  अरे!

जाहिर है, प्रोफेसर श्वार्ट्जमैन ने अपने आविष्कार कौशल का उपयोग करने के लिए अपने आविष्कार को डालने से पहले सिर्फ एक मूत थोड़ा अधिक किया हो सकता है। लेकिन क्या आप इसे स्वयं दोहरा सकते हैं ... जितना संभव हो उतने बाइट्स का उपयोग कर सकते हैं?

इनपुट चश्मा

आपको एक स्क्रिप्ट बनानी चाहिए जो कुत्ते की आवाज़ को उचित रूप से "हे" के रूप में ध्वनित करे। यह शुद्ध कोड गोल्फ है; बाइट्स की सबसे कम संख्या जीतती है।

आपके इनपुट में निम्नलिखित टोकन के कुछ संयोजन शामिल होंगे:

  • Bark, Baark, Baaark, Baaaark, ... (यह है कि, B*rk कम से कम 1 के साथ aतारांकन की जगह)
  • Woof, Wooof, Woooof, ... ( W*fकम से कम के साथ 2 o रों तारांकन की जगह)
  • Grr, Grrr, Grrrr, ..., ( Gद्वारा कम से कम इसके बाद 2 r रों)
  • कोई भी संख्या .(अवधि), !(विस्मयादिबोधक चिह्न) और / या ?(प्रश्न चिह्न) अक्षर, जो इनपुट में कहीं भी हो सकते हैं

ध्यान दें, फिर से, कि- Woofआधारित और Grrआधारित टोकन को क्रमशः कम से कम दो o एस और rएस की आवश्यकता होती है; Wofऔर मान्य टोकन नहींGr हैं ।

कोई टोकन कितने समय तक हो सकता है इसकी कोई सीमा नहीं है (जैसे, aएक Barkटोकन में कितने दोहराए जा सकते हैं ); हालाँकि, आपके डिकोडर को केवल इस चुनौती को पारित करने के लिए 10 कुल aएस, oएस, या rएस के साथ इनपुट टोकन के लिए सही ढंग से काम करने की आवश्यकता है ।

आउटपुट स्पेक्स

श्वार्ट्जमैन के डिजाइन के प्रति वफादार, आपके कैनाइन डिकोडर प्रोग्राम को इसे आउटपुट टेक्स्ट में संसाधित करना चाहिए:

  • Bark, Woofऔर Grrबन Hey;
  • Baark, Wooofऔर Grrrबन Heyy;
  • Baaark, Woooofऔर Grrrrबन Heyyy; आदि।
  • सभी- Barkआधारित टोकन के लिए, yआउटपुट- Heyआधारित टोकन में as की संख्या, s की संख्या के बराबर होनी चाहिए ;
  • सभी- Woofआधारित टोकन के लिए, yआउटपुट- Heyआधारित टोकन में s की संख्या, s की संख्या से एक कम होनी चाहिए o;
  • सभी- Grrआधारित टोकन के लिए, yआउटपुट- Heyआधारित टोकन में s की संख्या, s की संख्या से एक कम होनी चाहिए r;
  • सभी विराम चिह्नों ( ., !और ?) को अपरिवर्तित छोड़ दिया जाता है।

केवल एस और एस के yलिए आउटपुट से एक को छोड़ना याद रखें ! 8 s के साथ इनपुट , 8 s के मिलान सेट के साथ बन जाएगा । हालांकि, केवल 7 एस के साथ बन जाता है ।WoofGrrBaaaaaaaark?aHeyyyyyyyy?yWoooooooof?Heyyyyyyy?y

फिर से, यदि आप असीमित आकार के इनपुट टोकन के लिए काम करने के लिए अपना कार्यक्रम प्राप्त कर सकते हैं, तो यह बहुत अच्छा है, लेकिन इस चुनौती के प्रयोजनों के लिए, आपके कार्यक्रम को केवल यह सुनिश्चित करने के लिए जांचना होगा कि यह इनपुट टोकन के लिए ठीक से काम करता है, जिसमें 10 से अधिक बार पत्र नहीं हैं ।

आपके इनपुट में सभी Bark-, Woof-, और Grr-बेड टोकन को कैपिटल अक्षरों से शुरू किया जाता है। इसलिए, वहाँ कोई जरूरत नहीं संभाल मोड़ करने Bark grrrमें Hey heyyया इसी तरह कुछ भी।

उदाहरण इनपुट और आउटपुट

    • इनपुट: Bark. Bark! Bark!!
    • आउटपुट: Hey. Hey! Hey!!
    • इनपुट: Baaaaaark?(छह aएस)
    • आउटपुट: Heyyyyyy?(छह yएस)
    • इनपुट: Grrrrrrrr...(आठ rएस)
    • आउटपुट: Heyyyyyyy...( सात y एस)
    • इनपुट: ?...!
    • आउटपुट: ?...!
    • इनपुट: Wooof Woof? Grrrr. Baaaark Grr!
    • आउटपुट: Heyy Hey? Heyyy. Heyyyy Hey!

10
नमस्ते, और साइट पर आपका स्वागत है! बस इतना पता है, यह इस साइट पर प्रथागत है कि सबसे कम उत्तर को स्वीकार करने से पहले थोड़ी देर प्रतीक्षा करें। मैं आपको आपके द्वारा स्वीकार किए गए उत्तर को अस्वीकार करने के लिए प्रोत्साहित करूंगा, और जब तक इस सवाल पर गतिविधि कम से कम उत्तर को स्वीकार करने से पहले मर न जाए, तब तक प्रतीक्षा करें। यह अधिक उत्तरों को भी प्रोत्साहित करेगा।
DJMcMayhem


स्वीकृति प्रक्रिया के बारे में सुझाव के लिए धन्यवाद। मैं वास्तव में हर कुछ घंटों में उत्तरों की सूची की जाँच करने की योजना बना रहा था और, अगर मैंने देखा कि एक बेहतर उत्तर साथ आया था, तो इसे स्वीकार करें। किसी को भी खेद है कि मैंने यहां प्रतिष्ठा से वंचित किया हो सकता है।
ए। मिरब्यू

5
@ A.Mirabeau यह सम्मानजनक है और यह आदर्श रूप से कैसे काम करेगा, लेकिन कुछ लोग चौकस नहीं हैं, इसलिए अधिकांश उत्तरदाता यह मान सकते हैं कि विजेता पहले ही चुना जा चुका है। जबकि विजेता को चुनने के बारे में कुछ भी गलत नहीं है अगर आप इसे अपडेट करने की योजना बना रहे हैं, तो आपको कुछ शिकायतों के साथ इसके कम जवाब मिलने की संभावना है, इसलिए आमतौर पर कम से कम एक सप्ताह इंतजार करना बेहतर होता है।
मार्टिन एंडर

जवाबों:


16

रेटिना , 24 18 17 16 बाइट्स

MT0 के उत्तर में एक विचार के आधार पर 1 बाइट बचाई गई।

\wf?k?
y
\byy
He

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

व्याख्या

\wf?k?
y

यह बस सभी अक्षरों को बदल देता है y, लेकिन यदि उनका अनुसरण किया जाता है fया kहम तुरंत उसे बदल देते हैं। हटाकर fऔर kहम शब्दों की लंबाई को "सामान्य" कर देते हैं ताकि वे अब सभी yकी ज़रूरत से ज़्यादा दो हो जाएं।

\byy
He

यह yहर शब्द के पहले दो को बदल देता है He, रूपांतरण को पूरा करता है।


सबसे कुशल जवाब अब तक, अच्छी तरह से किया। मैं अभी इसे स्वीकार नहीं करने जा रहा हूं, लेकिन मैं आपको बता सकता हूं कि आप CAT FUD के लायक हैं।
ए। मिराबौ

10

पर्ल, 51 41 39 बाइट्स

s/(G.|[BW]..)(\w+)/He."y"x length$2/ge

प्रयोग

perl -pE 's/(G.|[BW]..)(\w+)/He."y"x length$2/ge'

इनपुट

Bark. Bark! Bark!!
Baaaaaark?
Grrrrrrrr...
?...!
Wooof Woof? Grrrr. Baaaark Grr!

उत्पादन

Hey. Hey! Hey!!
Heyyyyyy?
Heyyyyyyy...
?...!
Heyy Hey? Heyyy. Heyyyy Hey!

यह काम किस प्रकार करता है

-pगिनती के लिए 1 बाइट को जोड़ते हुए ऑटो-प्रिंटिंग का उपयोग करते हुए सरल रेगेक्सप प्रतिस्थापन । /geहर पैटर्न के लिए प्रतिस्थापन निष्पादित करता है, और प्रतिस्थापन को कोड के रूप में चलाता है।


एक पुराने संस्करण ने तीन-तरफ़ा पहचान का उपयोग किया, लेकिन मार्टिन एंडर ने देखा कि मैं पर्याप्त आक्रामक नहीं था, जिसने मुझे 10 बाइट्स बचाए।

msh210 ने मुझे सूचित किया कि आपको Heदो बाइट्स सहेजते हुए स्ट्रिंग के चारों ओर उद्धरण की आवश्यकता नहीं है ।


2
अब तक का सबसे अच्छा, बधाई।
ए। मीराबाई

1
@ A.Mirabeau धन्यवाद, यह काबिले तारीफ है कि मैं अभी कुछ मिनट पहले यहां पंजीकृत हुआ था!
पाइप

तीन सॉल्व करने के बाद मैं कुछ ही घंटे पहले यहां पंजीकृत होने पर विचार करने के लिए प्रेरित हो रहा हूं।
ए। मिराब्यू

1
आपको उद्धरण चिह्नों की आवश्यकता नहीं है He
msh210

@ msh210 दिलचस्प, पता नहीं था कि आप उन्हें वहाँ छोड़ना करने की अनुमति दी गई थी!
पाइप करें

5

अजगर, 106 बाइट्स

f=lambda s,a="B,He,Gr,He,Wo,He,a,y,r,y,o,y,f,,yk,".split(","):s if a==[]else f(s.replace(a[0],a[1]),a[2:])

डेमो

https://repl.it/C6Rr


यद्यपि स्वीकृत उत्तर नहीं है, यह सबसे बाइट-कुशल समाधान होने के लिए एक सम्माननीय उल्लेख के योग्य है जो केवल तीन आवश्यक कुत्ते-भाषा के कीवर्ड को बदलता है ।
ए। मीराब्यू

4

जावास्क्रिप्ट (ईएस 6) - 57 55 52 51 बाइट्स

f=s=>s.replace(/\wk?f?/g,'y').replace(/\byy/g,'He')

परीक्षा:

f=s=>s.replace(/\wk?f?/g,'y').replace(/\byy/g,'He');

[
  'Bark. Bark! Bark!!',
  'Baaaaaark?',
  'Grrrrrrrr...',
  '?...!',
  'Wooof Woof? Grrrr. Baaaark Grr!'
].forEach( s=>{console.log( f(s) );} );

@MartinEnder को बाइट्स 56 और 51 के लिए धन्यवाद और कुछ अन्य शेविंग के लिए प्रेरणा।


4

विम्सस्क्रिप्ट, 51 39 37 33 32 29 28 बाइट्स,

%s/\hk\?f\?/y/g|%s/\<yy/He/g

9 और बाइट्स शेविंग के लिए रेगेक्स क्रेडिट: MT0, मार्टिन एंडर, msh210

asciicast डेमो

स्पष्टीकरण:

                               1. Normalize words to same length & replace letters with ys 

%s                             Regex search and replace 
  /                            Regex search begin
   \hk\?f\?                    Find any letter (\h) optionally followed by k or f
           /                   Regex search end and replace start
            y                  Replace with y
             /                 Replace end
              g                Replace globally

               |               New command

                               2. Overwrite first two y of every word with He

                %s             Regex search and replace
                  /            Regex search begin
                   \<yy        Find yy at a word's beginning
                        /      Regex search end and replace start
                         He    replace with He
                           /   Replace end
                            g  Replace globally

1
मुझे विम्सस्क्रिप्ट नहीं पता है, लेकिन क्या आप \<yyइसके बजाय उपयोग कर सकते हैं \<\hy?
msh210

@ msh210 हाँ यह संभव है और मैंने समाधान को अपडेट किया, धन्यवाद
स्टारकास्ट


2

जावास्क्रिप्ट, 72 66 64 बाइट्स

f=
t=>t.replace(/k|f/g,'').replace(/\w/g,'y').replace(/\byy/g,'He')

संपादित करें: अलग f=और कार्य + कम बाइट गिनती


1
आपको f=(PPCG के डिफ़ॉल्ट के रूप में) की आवश्यकता नहीं है , इसलिए 64 बाइट्स काम करता है।
R

@ E @s --Iʀᴋ महान, मुझे यह पता नहीं था
स्टार

1

पाइके, 35 बाइट्स

.cFDlR\G.^+3-\y*"He"R+)Rdc~lL-],AsJ

यहाँ कोशिश करो!

अरे पैदा करता है, विराम चिह्न पैदा करता है, साथ में ज़िप करता है, जुड़ता है


1

पायथन 3, 140 135 134 बाइट्स

from re import*
f=lambda s:''.join('He'+'y'*len(x)+y for x,y in[(a+b+c,d)for a,b,c,d in findall('(?:Wo(o+)f|Gr(r+)|B(a+)rk)(\W+)',s)])

बदली पात्रों की घटनाओं को खोजने के लिए रेगेक्स का उपयोग करना।

संपादित करें: खोज परिणाम से मूल्यों को प्राप्त करने पर 1 बाइट व्हाट्सएप और 4 बाइट पर गोल्फ।

Edit2: गोल्फ 1 बाइट (बार्क का "ए" ठीक से नहीं गिना गया)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.