এই প্রশ্নে একটি সাধারণ মার্কভ মডেল ব্যবহার করা হবে। মার্কভ চেইন সম্পর্কে আরও তথ্যের জন্য, 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 এ "অক্ষরগুলি" "বাইটস" এ পরিবর্তন করুন
- তত্ত্বের প্রত্যাশিত ফ্রিকোয়েন্সি সহ প্রোগ্রামটি এলোমেলোভাবে স্ট্রিং আউটপুট করা উচিত
এটি কোড-গল্ফ , তাই সংক্ষিপ্ততম প্রোগ্রামটি জয়ী!
^
এবং $
কোট ইন? এটিকে উদ্ধৃতি থেকে বের করে নেওয়া বা ব্যাককোটে রেখে দেওয়া আরও স্পষ্ট করে দিতে পারে।