नाओवे मार्कोव चेन वर्ड जनरेशन


9

यादृच्छिक शब्द उत्पन्न करने के कई तरीके हैं। आप एक सेट से यादृच्छिक सिलेबल्स ले सकते हैं, आप n-tuples, शायद तंत्रिका नेटवर्क (वे क्या नहीं कर सकते हैं?) का उपयोग कर सकते हैं, व्यंजन और स्वरों के बीच बारी-बारी से, आदि। यह चुनौती जिस पद्धति पर आधारित है वह अब तक सबसे खराब है। । यह यादृच्छिक शब्दों को उत्पन्न करने के लिए मार्कोव श्रृंखला का उपयोग करता है। यदि आप मार्कोव श्रृंखला से परिचित हैं, तो आप शायद जानते हैं कि यह विधि इतनी भयानक क्यों है।

यदि आप मार्कोव श्रृंखला के बारे में पढ़ना चाहते हैं, तो यहां क्लिक करें

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

एक मार्कोव श्रृंखला <कोड> अब्बा </ कोड> के लिए

(सभी एज वेट सभी चित्रों के लिए समान हैं) आपका प्रोग्राम इनपुट टेक्स्ट के आधार पर मार्कोव श्रृंखला के माध्यम से पथ का उत्पादन करेगा। जैसा कि आप देख सकते हैं, एक 1/2 मौका है जो इसे आउटपुट करेगा a, 1/8 मौका aba, 1/16 मौका abba, 1/32 मौका ababa, आदि।

यहाँ कुछ अन्य उदाहरण मार्कोव श्रृंखलाएँ हैं:

yabba dabba doo

यहां छवि विवरण दर्ज करें

wolfram

यहां छवि विवरण दर्ज करें

supercalifragilisticexpialidocious

यहां छवि विवरण दर्ज करें

यदि आप अधिक उदाहरण चाहते हैं, तो इसका उपयोग करें । (मैंने इस पर बहुत मेहनत की थी)

चुनौती का विवरण:

  • इनपुट को स्ट्रिंग्स की सूची के रूप में लिया जा सकता है, या अंतरिक्ष, अल्पविराम, या न्यूलाइन अलग स्ट्रिंग के रूप में लिया जा सकता है
  • आप मान सकते हैं कि सभी शब्द पूरी तरह से बिना किसी विराम चिह्न के नीचे होंगे (ASCII 97-122)
  • आप या तो एक कार्यक्रम या एक समारोह लिख सकते हैं
  • परीक्षण करने के लिए, आप शायद उदाहरणों को इनपुट कर सकते हैं और देख सकते हैं कि क्या सभी इनपुट मार्कोव श्रृंखलाओं के साथ हैं

ये है , इसलिए आपका प्रोग्राम बाइट्स में बनाया गया है।

मुझे बताएं कि क्या इसका कोई हिस्सा अस्पष्ट है, और मैं इसे और अधिक समझ में लाने की कोशिश करूंगा।


यह शायद काफी मुक्त लोगों के लिए समझ में आता है, क्योंकि चैटगोट और मार्की दोनों भारित मार्कोव चैटबॉट IIRC हैं।
ASCII- केवल

मैं इनपुट और उन मार्कोव श्रृंखलाओं के बीच के संबंध को नहीं समझता। यह कभी-कभी दिए गए श्रृंखला में एक पथ का उपयोग करके इनपुट शब्द का उत्पादन करना असंभव प्रतीत होता है (उदाहरण के लिए "yabba dabo doo"। कोई भी आत्म लूप bआपके लिए एक डबल उत्पादन नहीं कर सकता है b। इसके अलावा एक बार पहुंचने पर bयह संभव नहीं लगता है। startअन्य शब्दों का उत्पादन करने के लिए वापस )। मेरा मानना ​​है कि आपको स्पष्ट करना चाहिए कि क्या आवश्यकताएं हैं ...
बकुरीउ

@ बकुरीउ पर yabba dabba dooदुर्घटना एक त्रुटि है। मैं इसे जल्द से जल्द ठीक कर दूंगा। के रूप में शुरू करने के लिए वापस पाने के लिए सक्षम नहीं होने के लिए, आप केवल उत्पन्न एक एक दिया से शब्द सेट शब्दों का। क्या यह स्पष्ट करता है?
डैनमैन मैन

जवाबों:


5

पायथ, 38 32 बाइट्स

VQJK1FZacN1k XKH]Z=KZ;WJ=JO@HJpJ

5 बाइट्स के लिए FryAmTheEggman को धन्यवाद ! सच कहूं तो मैंने पायथन उत्तर लिखना शुरू किया जब मैंने देखा कि किसी ने एक बहुत ही परिचित व्यक्ति को पोस्ट किया है तो मैंने खुद को कुछ नए के साथ चुनौती देने का फैसला किया है इसलिए मैंने अपना जवाब (जो मूल रूप से पिएतु का जवाब था) को पायथ में लिखा।

इनपुट स्ट्रिंग्स की एक सरणी है ["Mary" , "had" , "a" , "little"]


नाइस पहली पोस्ट, PPCG को :) कुछ गोल्फ युक्तियाँ स्वागत करते हैं: Fही कभी उपयोगी होता है जब चर रहा है Vहोगा उपयोग करते हैं, जब आप इसे नहीं करना चाहती अधिरोहित हो जाता है, ताकि आप पहले बदल सकते हैं Fdकरने के लिए Vऔर की जगह dके साथ Nकहीं और। [)लगभग एक तत्व जैसा है ]। एक सूची में जोड़ने के बजाय आप aकास्टिंग को बचाने के लिए एपेंड ( ) का उपयोग कर सकते हैं । सामान्य तौर पर, मुझे लगता है कि आप अधिक कार्यात्मक दृष्टिकोण अपनाकर इसे कम कर सकते हैं। मुझे यह भी पता नहीं है कि इसके लिए क्या +kJहै, खाली स्ट्रिंग को एक स्ट्रिंग में जोड़ना एक नोप होना चाहिए?
FryAmTheEggman

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

4

पायथन 2, 138 133 बाइट्स

from random import*
M={}
for w in input():
 P=p=1
 for k in list(w)+[""]:M[p]=M.get(p,[])+[k];p=k
while P:P=choice(M[P]);k+=P
print k

स्ट्रिंग की एक सरणी में ले जाता है जैसे कि ["yabba", "dabba", "doo"]

उदाहरण इनपुट के साथ आउटपुट:

do
ya
dabbbbbbbaba
do
ya
yaba
da
dabba
yabbababbababbbbababa
do

मैं इस परिणाम को भी उजागर करना चाहता हूं।

stidoupilioustialilisusupexpexpexpicexperagilidoupexpexpilicalidousupexpiocagililidocercagidoustilililisupialis

2

रूबी, 112 107 101 99

इनपुट स्टडिन, न्यूलाइन-सेपरेटेड स्ट्रिंग्स है।

QPaysTaxes ने इसे नीचे गिराने में बहुत मदद की!

M={}
while gets
k=''
$_.each_char{|c|M[k]||=[];M[k]<<c;k=c}
end
k=''
print k=M[k].sample while M[k]

1
मैं श्रेय की सराहना करता हूं: डी (कुछ इस तरह "गोल्फ की मदद के लिए QPaysTaxes के लिए धन्यवाद" या यहां की तरह आम लगता है)
निधि मोनिका के मुकदमे

1

मतलाब, 160 बाइट्स

इनपुट को स्ट्रिंग्स के सेल सरणी के रूप में लेता है, जैसे {'string1','string2','string3'}

s=input('');n=[];l=96;for i=1:numel(s);n=[n 96 double(s{i}) 123];end
while(l(end)<123);p=n(find(n==l(end))+1);l=[l p(randsample(nnz(p),1))];end
char(l(2:end-1))

यह शब्दों को पढ़ता है, और एक शब्द की शुरुआत को चिह्नित करने के लिए 96 के साथ, और एक शब्द के अंत का प्रतिनिधित्व करने के लिए एक 123 के साथ उन्हें ASCII मूल्यों के वेक्टर में परिवर्तित करता है। एक यादृच्छिक शब्द का निर्माण करने के लिए, 96 से शुरू करें। वेक्टर में 96 का अनुसरण करने वाले सभी पूर्णांकों की खोज करें, और अगले अक्षर को लेने के लिए उन लोगों से एक यादृच्छिक नमूना लें। इसे दोहराएं, सभी पूर्णांकों की तलाश में जो वर्तमान एक का पालन करते हैं, 123 तक पहुंचने तक, जो शब्द के अंत का संकेत देता है। इसे वापस अक्षरों में बदलें, और प्रदर्शित करें।

इनपुट {'yabba','dabba','doo'}परिणाम की तरह पैदा करता है da। यहाँ दस रन के परिणाम हैं: yabababbbababa, da, doo, doooooo, ya, da, doooo, ya, do, yaba

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