प्रसंग में शीर्षक खोजशब्द


10

यह चुनौती डी। पारनास में वर्णित एक समस्या पर आधारित है , जो कि सिस्टम को मॉड्यूल में विघटित करने के लिए उपयोग की जाने वाली कसौटी पर है , और जे मॉरिस, कार्यात्मक भाषाओं में रियल प्रोग्रामिंग में विस्तृत है ।

एक कार्यक्रम या फ़ंक्शन लिखें जो stdinआपकी भाषा के लिए एक उचित, सुविधाजनक प्रारूप में या एक तर्क के रूप में पुस्तक के शीर्षक की सूची लेता है । उदाहरण के लिए,

Green Sleeves
Time Was Lost

या

("Green Sleeves";"Time Was Lost")

stdoutकीवर्ड के वर्णमाला सूची में वापस लौटें या प्रिंट करें , प्रत्येक कीवर्ड को कोण ब्रेसिज़ ( <और >) में संलग्न करके मूल शीर्षक के भीतर अपना संदर्भ दिखाते हैं । इनपुट के साथ, आउटपुट एक उचित प्रारूप में हो सकता है जो आपकी भाषा के लिए सुविधाजनक है- नई-लाइन-अलग लाइनें, तार की एक सूची, आदि:

<Green> Sleeves
Time Was <Lost>
Green <Sleeves>
<Time> Was Lost
Time <Was> Lost

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

A Dugong
A Proboscis

एक वैध आउटपुट या तो होगा:

<A> Proboscis
<A> Dugong
A <Dugong>
A <Proboscis>

या:

<A> Dugong
<A> Proboscis
A <Dugong>
A <Proboscis>

यह - विजेता बाइट्स में सबसे छोटा समाधान है। मानक खामियों को अस्वीकार कर दिया जाता है।


यदि किसी शीर्षक में एक ही कीवर्ड एक से अधिक बार होता है तो क्या होगा? क्या उपस्थिति के क्रम में होना चाहिए, या मनमाना आदेश की अनुमति है?
पीटर टेलर

1
@PeterTaylor: कल्पना से, "शीर्षक अद्वितीय होंगे, और कीवर्ड प्रत्येक शीर्षक के भीतर अद्वितीय होंगे ..."
JohnE

जवाबों:


4

पायथ, 25 24 22 बाइट्स

VSsm,Rdcd\ QAN:HGjG"<>

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

लाइनों की एक सरणी के रूप में इनपुट लेता है, जैसे ["Green Sleeves","Time Was Lost"]

व्याख्या

VSsm,Rdcd\ QAN:HGjG"<>   implicit: Q = evaluated input

   m       Q                   map input lines:
       cd\                         split input line to words
    ,Rd                          replace each word by pair [word, entire line]
  s                          concatenate results for all input lines
 S                         sort the array of pairs lexicographically
V                        loop over the array
            AN             assign the word to G and the corresponding line to H
                 jG"<>       put the word between <>
              :HG          replace the word by the above in the line and print

छोटी लगती है - शीर्षक की हैंडलिंग की जाँच करें Time Was Time
पीटर टेलर

3
@PeterTaylor ओपी से हवाला देते हुए, keywords will be unique within each title
पुरकाकूदरी

2

जाप , 55 बाइट्स

शायद यह कम किया जा सकता है, लेकिन मुझे यकीन नहीं है कि कैसे ...

P+UqR £XqS m_+S+X) q', n £Xs1+XbS)rXs0,XbS),@"<{X}>")qR

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

P+UqR m@XqS m_+S+X) q', n m@Xs1+XbS)rXs0,XbS),@"<{X}>")qR
          // Implicit: U = input string, S = a space, P = empty string
UqR m@    // Split input at newlines, then map each item X to:
XqS m_    //  X split at spaces, with each item Z mapped to:
+S+X)     //   Z + a space + X.
P+   q',  // Parse the result as a string, and split at commas. Due to JS's default
          // array-to-string conversion (joining with commas), this flattens the array.
n         // Sort the result lexicographically.
m@Xs1+XbS // Map each item X to everything after the first space,
rXs0,XbS  // replacing the original keyword with
@"<{X}>"  // "<" + keyword + ">".
qR        // Join the result with newlines.
          // Implicit: output last expression


1

हास्केल, 113 बाइट्स

import Data.List
g l=[(m,h++('<':m++['>']):t)|(h,m:t)<-zip(inits l)$tails l]
f=map(unwords.snd).sort.(>>=g.words)

प्रयोग उदाहरण: f ["Green Sleeves","Time Was Lost"]-> ["<Green> Sleeves","Time Was <Lost>","Green <Sleeves>","<Time> Was Lost","Time <Was> Lost"]

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