दिए गए स्ट्रिंग में फिट होने के लिए शब्दों का आदेश देना


10

पत्रों की एक स्ट्रिंग और शब्दों के एक सेट को देखते हुए, शब्दों के एक क्रम का उत्पादन करते हैं ताकि उन्हें पत्र में उन पत्रों को छोड़ कर पाया जा सके जिनकी आवश्यकता नहीं है। शब्द सेट में एक से अधिक बार हो सकते हैं। इनपुट स्ट्रिंग और सभी शब्दों में 1 से 1000 लोअर केस लेटर्स होंगे। गिराए जाने वाले अक्षर शब्दों के अंदर या शब्दों के बीच हो सकते हैं।

आपका प्रोग्राम या फ़ंक्शन अक्षर स्ट्रिंग और शब्दों को सूचियों, एक स्ट्रिंग या STDIN से स्वीकार कर सकता है, और एक सूची या स्ट्रिंग आउटपुट के रूप में सभी शब्दों को एक सही क्रम में आउटपुट करना होगा। यदि एक से अधिक सही समाधान हैं, तो उनमें से केवल एक का ही उत्पादन करें। यदि कोई संभावित सही समाधान नहीं है, तो खाली सूची या रिक्त स्ट्रिंग का उत्पादन करें।

उदाहरण:

dogcatfrog cat frog dog
-> dog cat frog

xxcatfixsxhingonxgrapexxxfishingcxat cat grape catfish fishing
-> catfish grape fishing cat

dababbabadbaccbcbaaacdacdbdd aa bb cc dd ba ba ba ab ac da db dc
-> da ab ba ba ba cc bb aa ac dc db dd

flea antelope
->
(no solution)

यह कोड गोल्फ है। सबसे कम संख्या बाइट्स जीतती है।

संपादित करें: समझाया गया कि अतिरिक्त वर्ण शब्दों के अंदर हो सकते हैं।


क्या इनपुट प्रारूप एक स्ट्रिंग हो सकता है और फिर शेष तार की एक और सूची हो सकती है?
दरवाज़े

@ डॉर्कनोब, हां, यह ठीक है। इनपुट और आउटपुट संरचनाएं लचीली हैं। चुनौती के लिए जोड़ा गया।
लॉजिक नाइट

परीक्षण मामलों से यह प्रतीत होता है कि गिराए गए अक्षर हमेशा शब्दों के बीच होते हैं। ऐसा क्या? आपको कहना चाहिए कि चुनौती में, या एक शब्द के भीतर गिराए गए अक्षरों के साथ एक परीक्षण मामला शामिल करें
लुइस मेंडो

मुझे समझ नहीं आता कि तीसरा परीक्षण मामला; यदि आपका जवाब पुट ccसे पहले bbलेकिन bbऔर ccसबस्ट्रिंग केवल एक बार दिखाई देते हैं और bbसबस्ट्रिंग पहले प्रकट होता है।
नील

@Neil, ccbcbस्ट्रिंग के भाग में हम बीच में ड्रॉप करने के बाद ccतत्कालीन आउटपुट bbको आउटपुट करते हैं c
लॉजिक नाइट

जवाबों:


5

पायथ, 20 24 बाइट्स

पायथ पर मेरा पहला प्रयास :)

Jcw;FG.ptJI:hJj".*"G0jdG

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

Jcw;FG.ptJI:hJj".*"G0jdG
Jcw                         assign("J",chop(input()))
    FG.ptJ                  for G in permutations(tail(J)):
          I:hJj".*"G0        if match(head(J),join(".*",G)):
                     jdG      print(join(" ",G))

नोट्स: तीसरे उदाहरण ( dababbabadbaccbcbaaacdacdbdd aa bb cc dd ba ba ba ab ac da db dc) में एक लंबा समय लगता है ।


5

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

h@s./Myz.p

प्रदर्शन

यह कार्यक्रम बहुत अधिक बल है। यह पहले इनपुट के प्रत्येक सबसेट का निर्माण करता है, फिर सबसेट के हर विभाजन का, फिर पहले वाले के लिए जाँच करता है जो शब्द सूची का पुनरावर्ती है। किसी भी आउटपुट को stdout के साथ इर्रिट करने के माध्यम से कोई भी संभावना नहीं है, जिसे मेटा सर्वसम्मति द्वारा अनुमति दी जाती है। त्रुटि को 2 अतिरिक्त बाइट्स के लिए हटाया जा सकता है।

ध्यान दें कि दिए गए कई परीक्षण मामलों में, कार्यक्रम उचित समय में पूरा नहीं होगा।


आप दूसरे टेस्टकेस से चूक गए।
लीके नन

@ केनीलाऊ जब मैं उस मामले की कोशिश करता हूं, तो यह समय की उचित अवधि में वापस नहीं आता है। हालांकि यह गलत जवाब नहीं देता है। मुझे लगता है कि यह काम करता है। क्या आपके पास एक परीक्षण का मामला है जहां यह एक उत्तर लौटाता है, और यह उत्तर गलत है?
इसहाक

वास्तव में अच्छी विधि।
लीक नून

तुमने मुझे हरा दिया।
लीक नून

क्या आप इसे उत्तर में जोड़ सकते हैं?
लीक नून

1

जावास्क्रिप्ट (ईएस 6), 119 बाइट्स

(s,a,t=``,...r)=>a[0]?a.find((w,i)=>(b=[...a],b.splice(i,1),f(s,b,w+t,w,...r)))&&q:~s.search(t.split``.join`.*`)&&(q=r)

एक स्ट्रिंग और शब्दों की एक सरणी को स्वीकार करता है और शब्दों की एक सरणी या undefinedविफलता पर देता है। 2 बाइट्स जोड़ें यदि यह विफलता पर खाली स्ट्रिंग वापस करना चाहिए ( ?q:``), जिस स्थिति में यह वैकल्पिक संस्करण केवल 120 बाइट्स है और विफलता पर खाली स्ट्रिंग लौटाता है, और यदि विफलता पर 0 वापस करने की अनुमति है, तो 2 बाइट्स भी बचा सकता है:

(s,a,t=``,...r)=>a[0]?a.reduce((q,w,i)=>q||(b=[...a],b.splice(i,1),f(s,b,w+t,w,...r)),0):~s.search([...t].join`.*`)?r:``

(यह लिखने के बाद मैंने देखा कि एल्गोरिथम मूल रूप से @ केनीलाऊ के पाइथ उत्तर के समान है।)

संपादित संपादन: प्रश्न के स्पष्टीकरण के बाद अपडेट किया गया है, लेकिन अब तीसरे परीक्षण मामले पर वास्तव में धीमा है; मैंने इसे आखिरी रात से पहले सेट किया और आज सुबह मैंने देखा है कि वास्तव में इसका समाधान मिल गया है, कहीं 30 से 40 घंटे बाद। मैं वास्तव में हालांकि इसका मतलब था और इसे समाधान खिलाया (यह उलट समाधान के साथ सबसे अच्छा काम करता है, जिसे यह तुरंत सत्यापित करेगा)।


1

जावा 7, 256 बाइट्स

import java.util.*;String c(String...a){Map s=new HashMap();int j,i=1,l=a[0].length();for(;i<a.length;i++)if((j=a[0].indexOf(a[i]))>-1)s.put(j,s.get(j)!=null?s.get(j)+" "+a[i]:a[i]);a[0]="";for(j=0;j<l;j++)a[0]+=s.get(j)!=null?s.get(j)+" ":"";return a[0];}

एक अलग दृष्टिकोण का उपयोग करके इसे और अधिक गोल्फ करना निश्चित रूप से संभव होना चाहिए, लेकिन यह अभी के लिए करेगा।

Ungolfed और परीक्षण कोड:

इसे यहाँ आज़माएँ।

import java.util.*;
class M{
  static String c(String... a){
    Map s = new HashMap();
    int j,
        i = 1,
        l = a[0].length();
    for(; i < a.length; i++){
      if((j = a[0].indexOf(a[i])) > -1){
        s.put(j, s.get(j) != null
                  ? s.get(j) + " " + a[i]
                  : a[i]);
      }
    }
    a[0] = "";
    for(j = 0; j < l; j++){
      a[0] += s.get(j) != null
               ? s.get(j) + " "
               : "";
    }
    return a[0];
  }

  public static void main(String[] a){
    System.out.println(c("dogcatfrog", "cat", "frog", "dog"));
    System.out.println(c("xxcatfixsxhingonxgrapexxxfishingcxat", "cat", "grape", "catfish", "fishing"));
    System.out.println(
        c("dababbabadbaccbcbaaacdacdbdd ", "aa", "bb", "cc", "dd", "ba", "ba", "ba", "ab", "ac", "da", "db", "dc"));
    System.out.println(c("flea", "antelope"));
  }
}

आउटपुट:

dog cat frog 
cat grape fishing 
da ab ba ba ba bb db ac cc aa dd 

1

ग्रूवी (44 बाइट्स)

मैं विश्वास नहीं कर सकता कि किसी और ने इसके लिए रेग्जेस का इस्तेमाल किया ...

{a,b->a.findAll(/${b.join('|')}/).join(" ")}

व्याख्या

/${b.join('|')}/- स्ट्रिंग में किसी भी शब्द को खोजने के लिए एक regex बनाएं।
.findAll(...)- स्ट्रिंग में सभी घटनाओं को एक सरणी में ढूंढें और इकट्ठा करें।
.join(" ")- रिक्त स्थान के साथ एक साथ सरणी में शामिल हों।

मूल रूप से, यदि कोई घटनाएँ नहीं हैं, तो सरणी खाली है और खाली स्ट्रिंग को लौटाता है। यदि यह आवृत्तियों को ढूंढता है, तो यह एक सरणी वस्तु को घटनाओं के साथ लौटाता है और फिर इसे एक स्ट्रिंग में समतल करता है।

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