टेक्स्ट रिकॉल को इंजेक्ट करें


13

क्योंकि रिकरिंगिंग पृथ्वी पर सबसे बड़ा मेमे है, आप [नियमों को जानते हैं और इसलिए मैं] सबसे छोटे कोड को लिख सकते हैं जो अनपेक्षित पाठक को पाठकीय रूप से रीकॉल कर सकते हैं। चलो [आप नीचे] एक इनपुट पाठ जो कि अक्षरों, विराम चिह्न, और रिक्ति हो। पाठ में पहले दो छंदों में से एक [झूठ और आपको चोट] का वाक्यांश ...

We're no strangers to love
You know the rules and so do I
A full commitment's what I'm thinking of
You wouldn't get this from any other guy
I just wanna tell you how I'm feeling
Gotta make you understand

Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you

... बाद में ब्रैकेट में बाकी लाइन डालें।

इनपुट

इनपुट एक एकल पंक्ति स्ट्रिंग है जिसमें वैकल्पिक अनुगामी न्यूलाइन के साथ केवल मुद्रण योग्य ASCII है।

उत्पादन

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

अतिरिक्त विवरण:

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

  • मिलान असंवेदनशील होना चाहिए: बोल में कैपिटल होने के बावजूद we'reपरिवर्तित हो जाता है। we're [no strangers to love]We're
  • मैचिंग लालची होना चाहिए। Does he know the answer?के Does he know the [rules and so do I] answer?बजाय परिवर्तित किया जाना चाहिएDoes he know [the rules and so do I] the [rules and so do I] answer?
  • यदि प्रदान किए गए गीत में एक शब्द एक से अधिक बार दिखाई देता है, तो पंक्ति को पूरा करने के लिए कोई भी घटना चुनें।
  • यदि गीत लाइन में अंतिम शब्द है, तो उसके बाद कुछ भी न डालें।
  • विराम चिह्न को "शब्द" के भाग के रूप में शामिल किया गया है। I'mएक एकल शब्द है और इसके साथ मेल नहीं खा सकता है I। इसी तरह, you.अवधि के कारण किसी भी गीत के साथ मेल नहीं खाता।

कुछ शब्द जैसे Iपूरे गीत के साथ-साथ एक पंक्ति के अंत में कई बार दिखाई देते हैं। चूंकि नियम यह है कि उपरोक्त गीतों में किसी भी घटना का उपयोग किया जा सकता है, और उन घटनाओं में से एक पंक्ति के अंत में है, जिसका कोई मिलान Iआवश्यक नहीं है। के लिए दूसरा विकल्प Iहै [just wanna tell you how I'm feeling]

यदि दो मैच ओवरलैप होते हैं, तो आप किसी एक को चुन सकते हैं। इसका मतलब है कि how I'm thinkingबन सकता है how I'm [feeling] thinking [of]या how [I'm feeling] I'm thinking [of]तब I'mसे या तो का हिस्सा हो सकता है how I'mया I'm thinking। यदि, हालांकि इनपुट टेक्स्ट बस था I'm thinking, तो आउटपुट होना चाहिए I'm thinking [of]

अतिरिक्त परीक्षण मामले:

I don't know what I'm doing with my life.
is converted to
I [just wanna tell you how I'm feeling] don't know [the rules and so do I] what I'm [thinking of] doing with my life.
Many additional solutions are possible, since words like `I` appear multiple times.


Will someone please save me from these memes?
is converted to
Will someone please save me from [any other guy] these memes?


Two strangers walked into a bar.  One said "hello."  The other said "goodbye."
is converted to
Two strangers [to love] walked into a [lie and hurt you] bar.  One said "hello."  The [rules and so do I] other [guy] said "goodbye."

इस दोस्त से प्रेरित चुनौती ।



दूसरा परीक्षण मामला गलत प्रतीत होता है ( fromबनना चाहिए from [any other guy])।
दरवाज़े

जवाबों:


6

gawk, 316 + 377 = 693

पहला कमांड लाइन पैरामीटर गीत का फ़ाइल नाम है (375 बाइट्स + 2 के लिए मंगलाचरण = 377)। अन्य सभी फ़ाइलों को रिक्रॉल करता है। प्रिंट करता है stdout

BEGIN{FPAT="[^ ]+ *";OFS=""}func d(a){b=tolower(a);sub(/ *$/,"",b);return b}FNR==NR{for(s=$0;NF;$0=s=$0){for(i=1;i<NF;i++){k=k $i;$i="";v[d(k)]="["$0"] "}$0=s;k=$1=""}next}{for(s=$0;NF;$0=s=$0){for(j=NF;(--j)>0&&!(d($0) in v);$(j+1)="");k=v[d($0)];if($0!~/ $/)k=" "k;printf($0 k);for($0=s;j-->=0;$(j+2)="");}print""}

Ungolfed

BEGIN{FPAT="[^ ]+ *";OFS=""}
func d(a){b=tolower(a);sub(/ *$/,"",b);return b}
FNR==NR{
  for(s=$0;NF;$0=s=$0){
    for(i=1;i<NF;i++)
    {
      k=k $i;
      $i="";
      v[d(k)]="["$0"] "
    }
    $0=s;
    k=$1=""
  }
  next
}
{
  for(s=$0;NF;$0=s=$0){
    for(j=NF;(--j)>0&&!(d($0) in v);$(j+1)="");
    k=v[d($0)];
    if($0!~/ $/)k=" "k;
    printf($0 k);
    for($0=s;j-->=0;$(j+2)="");
  }
  print""
}

परीक्षण के परिणाम

इनपुट:

we're
We're
Does he know the answer?
I
how I'm thinking
I'm thinking
I don't know what I'm doing with my life.
Will someone please save me from these memes?
Two strangers walked into a bar.  One said "hello."  The other said "goodbye."
gonna run

आउटपुट:

we're [no strangers to love] 
We're [no strangers to love] 
Does he know the [rules and so do I] answer? 
I [just wanna tell you how I'm feeling] 
how I'm [feeling] thinking [of] 
I'm thinking [of] 
I [just wanna tell you how I'm feeling] don't know [the rules and so do I] what I'm [thinking of] doing with my life. 
Will someone please save me from [any other guy] these memes? 
Two strangers [to love] walked into a [lie and hurt you] bar.  One said "hello."  The [rules and so do I] other [guy] said "goodbye." 
gonna run [around and desert you] 

1. यह पहले परीक्षण के मामले में विफल रहता है (यह चीजों को बीच में रखता है whatऔर I'm, जो "गैर-लालची" मिलान है)। 2. यह तीसरे परीक्षण के मामले में विफल रहता है (यह दो स्थानों को एक में बदल देता है)। 3. यदि आप एक अलग फाइल में लिरिक्स स्टोर करते हैं, तो आपको awkअपनी बाइट काउंट में उस फाइल (साथ ही कमांड में इसे शामिल करने के लिए +2 ) को गिनना होगा।
दरवाज़े

@Doorknob धन्यवाद। लोभ निश्चित है। गीत फ़ाइल मेरे चरित्र की गिनती में नहीं आती है क्योंकि यह अनलॉक्ड है और चुनौती शुरू होने से पहले सार्वजनिक रूप से उपलब्ध थी। मैं awkस्रोत कोड भी नहीं गिनता ।
रेनर पी।

अब यह इनपुट gonna run(अपेक्षित आउटपुट gonna run [around and desert you], वास्तविक आउटपुट gonna [tell a lie and hurt you] run [around and desert you]) के लिए विफल है । यह अभी भी एक पंक्ति में कई स्थानों को काटता है। आपको अपने बाइट काउंट में लिरिक्स फ़ाइल को गिनना होगा, क्योंकि यह awkप्रोग्राम का एक गैर-मानक आह्वान है ।
दरवाज़े

@ डॉर्कनोब ओके। मैंने अधिकांश कार्यक्रम को फिर से लागू किया और gawkअब अंतरिक्ष-संरक्षण के लिए अलग-अलग क्षेत्र की आवश्यकता है । अब सभी परीक्षण मामलों को पास करता है।
रेनर पी।

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