इस प्रश्न में एक सरल मार्कोव मॉडल का उपयोग किया जाएगा। मार्कोव चेन के बारे में अधिक जानकारी के लिए, http://setosa.io/ev/markov-chains/ देखें ।
एक तार ले लो। इस उदाहरण के लिए, हम इस शब्द का उपयोग करेंगे:
reader
अब, प्रत्येक वर्ण के लिए, उन पात्रों को लें जो स्ट्रिंग में वर्ण की प्रत्येक घटना के बाद दिखाई देते हैं। ( `^`
स्ट्रिंग की शुरुआत का `$`
प्रतिनिधित्व करता है और अंत का प्रतिनिधित्व करता है)
`^` -> {'r'} # After the start of the string, there is an `r`.
'r' -> {'e', `$`} # After the first `r` (*r*eader), there is an `e`
# after the second (reade*r*), there is the end of the string.
'e' -> {'a', 'r'}
'a' -> {'d'}
'd' -> {'e'}
अब, स्ट्रिंग की शुरुआत से शुरू करते हुए, अगले सेट में पात्रों में से एक से यादृच्छिक रूप से चुनें। इस चरित्र को जोड़ें और फिर इसके अगले सेट में पात्रों से चुनें, और इसी तरह जब तक आप अंत तक नहीं पहुंचते। यहाँ कुछ उदाहरण शब्द हैं:
r
rereader
rer
readereader
यदि एक चरित्र कई बार किसी अन्य चरित्र के बाद दिखाई देता है, तो इसे चुने जाने की अधिक संभावना है। उदाहरण के लिए, में cocoa can
, एक के बाद c
, एक होने का एक मौका का एक दो तिहाई है और एक होने का o
एक तिहाई मौका है a
।
'c' -> {'o', 'o', 'a'}
चुनौती
एक प्रोग्राम बनाएं जो कोई इनपुट नहीं लेता है और ऊपर की तरह एक मार्कोव चेन का उपयोग करके उत्पन्न एक यादृच्छिक स्ट्रिंग को आउटपुट करता है, जहां श्रृंखला का इनपुट प्रोग्राम का स्रोत है।
- कार्यक्रम में कम से कम दो वर्ण होने चाहिए, जिनमें से दो समान होने चाहिए ("उबाऊ" श्रृंखला को रोकने के लिए जिसमें केवल एक आउटपुट हो)
- यदि आप चाहें तो पात्रों के बजाय बाइट्स का उपयोग करने के लिए मॉडल को संशोधित कर सकते हैं, लेकिन नियम 1 में "वर्ण" को "बाइट्स" में बदल सकते हैं
- कार्यक्रम को सिद्धांत में अपेक्षित आवृत्ति के साथ बेतरतीब ढंग से तारों का उत्पादन करना चाहिए
यह कोड-गोल्फ है , इसलिए सबसे छोटा कार्यक्रम जीतता है!
^
और $
में उद्धरण? हो सकता है कि इसे उद्धरणों से बाहर ले जाना, या उन्हें बैकक्वाटर में रखना अधिक स्पष्ट हो।