एक असतत संभाव्यता वितरण की अवधारणा से लोगों को परिचित कराने का एक उत्कृष्ट उदाहरण है बीन मशीन । इस मशीन के शीर्ष पर एक संकीर्ण मार्ग से बड़ी मात्रा में पत्थर गिरते हैं, जिसके बाद वे परस्पर पिन की पंक्तियों को मारते हैं, जहां प्रत्येक पिन पर संगमरमर हिट होता है यह पिन के बाईं या दाईं ओर गिर सकता है। अंत में, पिन को मशीन के निचले भाग में लंबवत डिब्बे में एकत्र किया जाता है। इस मशीन का एक सरल आरेख इस तरह दिखता है:
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
|_|_|_|_|_|_|
इस आरेख में, उस O
स्थान को इंगित करता है जहां से पत्थर गिरते हैं। प्रत्येक ^
एक पिन होता है, जिस पर संगमरमर को बाईं ओर या पिन के दाईं ओर वर्ग में ले जाने का 50% मौका होता है। मार्बल्स तब उपकरण के तल पर डिब्बे में इकट्ठा होते हैं, और बड़ी संख्या में मार्बल्स के लिए, डिब्बे में संगमरमर के ढेर की ऊंचाई एक असतत द्विपद वितरण के समान होगी।
चुनौती
इस चुनौती के लिए, आप ऊपर की तरह आरेखों के आधार पर बीन मशीनों के परिणामी संभाव्यता वितरण की गणना करेंगे। आरेखों की व्याख्या एक दो-आयामी 'कार्यक्रम' के रूप में की जाती है, जो मार्बल्स से होकर गुजरती है, या तो खेतों की ओर या वर्तमान क्षेत्र के नीचे के क्षेत्रों की ओर। जब मार्बल्स मशीन के निचले हिस्से में पहुंचते हैं तो उन्हें संभाव्यता वितरण के लिए गिना जाता है। इसे दिलचस्प बनाए रखने के लिए, इन आरेखों में साधारण स्रोत और पिनों की तुलना में कुछ अधिक फ़ील्ड होंगे। एक उदाहरण आरेख है:
| O |
| ^ |
| ^ / |
| ^ | ^ |
| <^- = v |
| ^ ^ ^ ^ ^ |
इसके अलावा, अब प्रत्येक के पास एक रोटेशन दिशा है। यह दिशा कुछ क्षेत्रों द्वारा निर्धारित की जाती है और यह निर्धारित करती है कि किस क्षेत्र में संगमरमर कई अन्य क्षेत्रों में चलता है।
निम्नलिखित क्षेत्रों को परिभाषित किया गया है:
O
: स्रोत इसके नीचे सीधे पत्थर दिखाई देते हैं। इन मार्बल्स की दिशा 50% बाएं, 50% दाईं ओर है। प्रत्येक स्रोत समान मात्रा में पत्थर का उत्पादन करता है।U
: सिंक। इस क्षेत्र में प्रवेश करने वाले किसी भी पत्थर को बीन मशीन से हटा दिया जाता है।: खाली जगह। यदि कोई संगमरमर इस क्षेत्र में आता है, तो यह नीचे के क्षेत्र में चला जाएगा।
-
: मंज़िल। यदि कोई संगमरमर इस क्षेत्र में आता है, तो वह अपनी वर्तमान दिशा के आधार पर या तो बाईं ओर या दाईं ओर फ़ील्ड में स्थानांतरित हो जाएगा।^
: फाड़नेवाला। यदि कोई संगमरमर इस क्षेत्र में आता है, तो यह 50% क्षेत्र को दाईं ओर या फ़ील्ड को बाईं ओर से अलग करता है। यह भी संगमरमर की दिशा निर्धारित करता है।v
: सम्मिलित हों। यदि कोई संगमरमर इस क्षेत्र में आता है, तो यह नीचे के क्षेत्र में चला जाएगा।/
: धीमा पैड। यदि कोई संगमरमर इस क्षेत्र में आता है, तो यह संगमरमर की दिशा निर्धारित करते हुए, पैड के बाईं ओर स्थित क्षेत्र में चला जाएगा।\
: पिछले के समान, लेकिन दाईं ओर।|
: परावर्तक। यदि कोई संगमरमर इस क्षेत्र में आता है, तो यह संगमरमर की दिशा को उलट देगा, और इस उलट दिशा के आधार पर संगमरमर को दाएं या बाएं क्षेत्र में ले जाएगा।=
: तोप। यदि कोई संगमरमर इस क्षेत्र में आता है, तो वह इसे वर्तमान दिशा में दाईं या बाईं ओर ले जाएगा, जब तक कि संगमरमर एक क्षेत्र का सामना नहीं करता है,
-
या नहींO
।<
: पिछले की तरह ही, लेकिन हमेशा दिशा निर्धारित करेगा और बाईं ओर बढ़ेगा।>
: पिछले के समान, लेकिन दाईं ओर।
आरेख के संबंध में निम्नलिखित गारंटी दी गई है।
- प्रत्येक इनपुट पंक्ति में फ़ील्ड्स की लंबाई समान होगी।
- प्रत्येक पंक्ति का सबसे बाएँ और दाएँ क्षेत्र हमेशा एक होगा
|
। - आरेख में कोई भी संभावित पथ नहीं होगा, जिसके माध्यम से मशीन पुनरावृत्तियों की अनिश्चित मात्रा के लिए मशीन में अटक सकती है, जैसे
\/
या^^
। - आरेख में केवल उपर्युक्त क्षेत्र होंगे।
- एक या अधिक स्रोत हैं
परिणाम
आपका कार्य प्रायिकता वितरण का 16-लाइन लंबा ASCII बार ग्राफ उत्पन्न करना होगा, जिसमें मार्बल ग्राफ़ के नीचे की ओर से बाहर निकलता है, इसलिए सबसे बड़ी प्रायिकता सभी 16 वर्णों को कवर करती है। तो निम्नलिखित समस्या के लिए:
| O |
| ^ |
| ^ ^ |
| ^ ^ ^ |
| ^ ^ ^ ^ |
| ^ ^ ^ ^ ^ |
आपके कार्यक्रम को निम्नलिखित समाधान का उत्पादन करना चाहिए (ध्यान दें कि इसमें इनपुट प्रोग्राम के समान चौड़ाई होनी चाहिए, जिसमें पाइप शामिल हैं:
# #
# #
# #
# #
# #
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # # # #
# # # # # #
उदाहरण
निम्नलिखित एक उदाहरण है जो सभी विभिन्न प्रकारों की कार्यक्षमता का परीक्षण करना चाहिए:
| O O |
| O ^ / <^\\\ |
| ^ > ^ |
| ^ ^ ^ =|
| ^ ^ | ^ <^ O |
| ^ > ^ | ^ O ^> v |
|| ^U ^ | = ^\ |
| ^ ^ ^ ^U ^\ ---^ |
| = ^ ^ = v |
इसका परिणाम निम्न आउटपुट में होना चाहिए:
#
#
#
#
# #
# #
# #
# # # #
# # # #
# # # #
# # # #
## # # #
## # # # #
# ### # # # #
# # ### # # # #
# # ### # # # #
नियम
दोनों कार्य और पूर्ण कार्यक्रम इस चुनौती के लिए मान्य उत्तर देते हैं। आप आरेख को एक नईलाइन-पृथक स्ट्रिंग के रूप में प्राप्त करेंगे, और आपको दिए गए प्रारूप में आउटपुट ग्राफ को वापस करना चाहिए। डिफ़ॉल्ट इनपुट / आउटपुट नियम लागू होते हैं। आउटपुट में अनुगामी और अग्रणी न्यूलाइन्स की अनुमति होती है, प्रत्येक पंक्ति में इनपुट के समान चौड़ाई होनी चाहिए।
जैसा कि अधिक रचनात्मक समाधानों की अनुमति देने के लिए, केवल यह आवश्यक है कि आपका कार्यक्रम उसी आरेख के लिए 90% से अधिक समय के सही परिणाम का उत्पादन करे। यह सब के बाद एक संभावना सिमुलेशन है।
स्कोरिंग
यह कोड-गोल्फ है , इसलिए बाइट्स में सबसे कम स्कोर जीतता है।
v
= [space]
?
v
और [space]
तोपों के आसपास कैसे बातचीत करते हैं, इसमें अंतर है।