शब्दों को अन्य शब्दों में विभाजित करें (उदाहरण के लिए, "बाद में" = "पिछाड़ी" + "एरग" + "निम्न")


13

यहाँ आप सभी के लिए एक शब्द है! एक प्रोग्राम या फ़ंक्शन लिखें जो शब्दों की एक सूची लेता है और प्रत्येक शब्द के लिए सभी संभव समवर्ती डिकम्पोजिशन की सूची तैयार करता है। उदाहरण के लिए:

(नोट: यह केवल निदर्शी उद्देश्यों के लिए एक छोटा सा नमूना है। वास्तविक उत्पादन कहीं अधिक बड़ा है।)

afterglow = after + glow
afterglow = aft + erg + low
alienation = a + lie + nation
alienation = a + lien + at + i + on
alienation = a + lien + at + ion
alienation = alien + at + i + on
alienation = alien + at + ion
archer = arc + her
assassinate = ass + as + sin + ate
assassinate = ass + ass + in + ate
assassinate = assassin + ate
backpedalled = back + pedal + led
backpedalled = back + pedalled
backpedalled = backpedal + led
goatskin = go + at + skin
goatskin = goat + skin
goatskin = goats + kin
hospitable = ho + spit + able
temporally = tempo + rally
windowed = win + do + wed
windowed = wind + owed
weatherproof = we + at + her + pro + of
yeasty = ye + a + sty

ठीक है, आप विचार प्राप्त करते हैं। :-)

नियम

  • अपने चयन की किसी भी प्रोग्रामिंग भाषा का उपयोग करें। प्रत्येक भाषा की जीत के लिए चरित्र गणना द्वारा सबसे छोटा कोड । इसका मतलब यह है कि प्रयुक्त प्रत्येक भाषा के लिए एक विजेता है। समग्र विजेता सभी प्रस्तुत किए गए कोड का सबसे छोटा कोड होगा।
  • इनपुट सूची एक पाठ फ़ाइल, मानक इनपुट या आपकी भाषा प्रदान करने वाली किसी भी सूची संरचना (सूची, सरणी, शब्दकोश, सेट, आदि) हो सकती है। शब्द अंग्रेजी या कोई अन्य प्राकृतिक भाषा हो सकते हैं। (यदि सूची अंग्रेजी के शब्द हैं, तो आप "a" और "i" को छोड़कर एकल-अक्षर वाले आइटम को अनदेखा या पूर्व-फ़िल्टर करना चाहेंगे। इसी प्रकार, अन्य भाषाओं के लिए, यदि आप यदि वे चाहते हैं तो निरर्थक वस्तुओं को अनदेखा करना चाहेंगे। फ़ाइल में दिखाई दें।)
  • आउटपुट सूची एक पाठ फ़ाइल, मानक आउटपुट या आपकी भाषा का उपयोग करने वाली किसी भी सूची संरचना हो सकती है।
  • आप अपनी पसंद के किसी भी शब्दकोश का उपयोग कर सकते हैं, लेकिन आप संभवतः एक का उपयोग करना चाहते हैं जो एक के बजाय समझदार शब्द प्रदान करता है जो बहुत अधिक अस्पष्ट, रहस्यमय, या अस्पष्ट शब्द प्रदान करता है। यह फ़ाइल मैंने इस्तेमाल की: 58000 से अधिक अंग्रेजी शब्दों की कॉर्नकोब सूची

प्रशन

यह चुनौती मुख्य रूप से कार्य को पूरा करने के लिए कोड लिखने के बारे में है, लेकिन परिणामों के माध्यम से कंघी करना भी मजेदार है ...

  1. क्या सब-पासवर्ड आमतौर पर होते हैं?
  2. क्या शब्द सबसे बड़ी संख्या में सब-पासवर्ड को विघटित कर सकता है?
  3. किस शब्द को सबसे अलग तरीके से विघटित किया जा सकता है?
  4. कौन से शब्द सबसे बड़े उपशब्द से बने हैं?
  5. आपको सबसे अधिक मनोरंजक कौन सी डिकम्पोजिशन मिली?

@Geobits - आह, धन्यवाद! alienationजब मैंने काट दिया और चिपकाया तो मुझे दो अपघटनों की याद आई। अभी तय किया है। दूसरों के संदर्भ में, ऊपर दी गई सूची केवल एक छोटा सा नमूना है। मेरे परीक्षण कार्यक्रम ने कॉर्न्सोब सूची दिए जाने पर हजारों उत्तर दिए।
टॉड लेहमन

1
"क्या उप-शब्द आमतौर पर होते हैं?" वहाँ एक जंगली अनुमान लगा सकते हैं और कहते हैं कि 'ए' शीर्ष के पास हो सकता है।
सेल्यमे

@ सेबैस्टियनलैमरिचस - मुझे पता नहीं ... हो सकता है, न हो। :)
टॉड लेहमैन

@ToddLehman वाक्य में ठीक 0 सब-पासवर्ड हैं, इसलिए 'a' अभी भी पहले बराबर है: P
सेलीमे

@ एसबस्टियनलैमरिच यदि आप टॉड की प्रतिक्रिया का उल्लेख कर रहे हैं, तो "डननो" को "डन" + "नहीं" में विभाजित किया जा सकता है। ;)
मैं

जवाबों:


3

अजगर 186

a=open(raw_input()).read().split()
def W(r):
 if r:
    for i in range(1,len(r)+1):
     if r[:i]in a:
        for w in W(r[i:]):yield[r[:i]]+w
 else:yield[]
while 1:
 for f in W(raw_input()):print f

विशेष रूप से कुशल नहीं लेकिन वास्तव में भयानक धीमी गति से नहीं। यह सिर्फ भोला-भाला है (मुझे लगता है कि यह संभव है, हालांकि मुझे लगता है कि संभावना नहीं है कि अजगर कुछ चतुर अनुकूलन करता है) यह जांचता है कि उप-शब्द कॉर्नकोब शब्दकोश में हैं और पुनरावृत्ति में कई शब्द मिलते हैं। बेशक यह शब्दकोश बहुत व्यापक है और आप एक ऐसा प्रयास कर सकते हैं जिसमें विभिन्न संक्षिप्ताक्षर और समालोचना शामिल नहीं है (जैसे चीजों के लिए अग्रणी bedridden: be dr id den)। इसके अलावा लिंक किए गए शब्दकोश में 'ए' या 'आई' शब्द नहीं थे इसलिए मैंने उन्हें मैन्युअल रूप से जोड़ा।

संपादित करें:

अब पहला इनपुट डिक्शनरी का फ़ाइल नाम है, और हर अतिरिक्त एक शब्द है।


यह print fprint(f)

इसके अलावा, मैं इसे कैसे चलाऊं? echo archer|python2 filename.pyअंतिम पंक्ति के लिए एक EOFError को आउटपुट करता है

कुछ चीजें जो आप अभी भी बदल सकते हैं (मैंने इनका परीक्षण नहीं किया है, लेकिन मुझे पूरा यकीन है कि यह काम करेगा): for f in W(raw_input()):print f=> ''.join(W(raw_input()); a=open('c').read().split('\n')=>a=open('c').readlines()
ıʇǝɥʇuʎs

@ workı butuʎs आपका पहला काम होगा, लेकिन readlinesलाइनों के अंत में newline वर्ण रखता है, यही कारण है कि मैंने ऐसा किया था।
केएसएबी

@ requiresı alluʎs ओह वास्तव में ऐसा लगता joinहै कि सभी तत्वों को तार होने की आवश्यकता है और मैं इसे एक रूप में छोटे रूप में प्राप्त नहीं कर सकता जो मेरे पास पहले से है।
केसाब

2

कोबरा - 160

sig Z(x,y)
def f(b)
    c as Z=do(x,y)
        if x.length<1,print y
        for z in File.readLines('t'),if z==x[:e=z.length].toLower,c(x[e:],y+' '+z)
    for t in b,c(t,'[t]:')

यह एक फ़ंक्शन (दो कार्यों की छंटनी) है जो एक List<of String>* लेता है और तर्क सूची में प्रत्येक स्ट्रिंग के लिए संभव उप-शब्द व्यवस्था वाले तारों को प्रिंट करता है।

* प्रकार वास्तव में है List<of dynamic?>, लेकिन इसके अलावा कुछ भी प्रदान List<of String>करना शायद इसे तोड़ देगा।


2

स्काला, 132 129

संपादित करें: एक समारोह की तुलना में स्टड से लूप पढ़ने के रूप में थोड़ा कम

while(true)print(readLine.:\(Seq(List(""))){(c,l)=>l.flatMap{m=>Seq(c+""::m,c+m.head::m.tail)}}filter(_.forall(args contains _)))

ऐसे दोड़ो

scala decompose.scala aft after erg glow low

(या एक लंबी शब्द सूची का उपयोग करें :))

मूल:

def f(s:Seq[String])=s.map{_.:\(Seq(List(""))){(c,l)=>l.flatMap{m=>Seq(c+""::m,c+m.head::m.tail)}}filter(_.forall(args contains _))}

Seq [String] से Seq [Seq [List [String]]] तक कार्य। कमांड लाइन तर्क के रूप में शब्दकोश लेता है।

Ungolfed:

def decompose(wordList: Seq[String]) =
  wordList.map{ word =>                              // for each word
    word.foldRight(Seq(List(""))){ (char, accum) =>  // for each character
      accum.flatMap{list =>
        Seq(char+""::list,char+list.head::list.tail) // add it as both a new list and 
      }                                              // the to start of the first list
    }.filter(_.forall(args contains _))              // filter out lists w/ invalid words
  }

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

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