परिचय
इस चुनौती में, आपका कार्य सरल कार्यों के संग्रह को लागू करना है जो एक साथ सरल संभाव्यता वितरण के लिए एक प्रयोग करने योग्य मिनी-पुस्तकालय बनाते हैं। कुछ अधिक गूढ़ भाषाओं को समायोजित करने के लिए लोग यहां उपयोग करना पसंद करते हैं, निम्नलिखित कार्यान्वयन स्वीकार्य हैं:
- एक कोड स्निपेट नामित कार्यों (या निकटतम समकक्ष) के संग्रह को परिभाषित करता है।
- अभिव्यक्तियों का एक संग्रह जो नामित या अनाम कार्यों (या निकटतम समकक्ष) का मूल्यांकन करता है।
- एक एकल अभिव्यक्ति जो कई नामित या अनाम फ़ंक्शन (या निकटतम समकक्ष) का मूल्यांकन करती है।
- कमांड लाइन, एसटीडीआईएन या निकटतम समकक्ष से इनपुट लेने वाले स्वतंत्र कार्यक्रमों का एक संग्रह, और एसटीडीयूटी या निकटतम समकक्ष के लिए आउटपुट।
कार्य करता है
यदि वांछित हो, तो आप निम्न नामों को लागू करेंगे।
uniformइनपुट के रूप में दो फ़्लोटिंग पॉइंट नंबर लेता हैaऔरb, और समान वितरण को वापस लौटाता है[a,b]। तुम मान सकते हो किa < b; मामलाa ≥ bअपरिभाषित है।blendआदानों के रूप में तीन संभावना वितरण लेता हैP,QऔरR। यह एक संभावना वितरण रिटर्नS, जो मूल्यों खींचता हैx,yऔरzसेP,QऔरR, क्रमशः, और पैदावारyकरता है, तोx ≥ 0है, औरzयदिx < 0।overइनपुट के रूप में एक फ्लोटिंग पॉइंट नंबरfऔर एक प्रायिकता डिस्ट्रीब्यूशन लेता हैP, औरx ≥ fएक रैंडम नंबर सेxखींची गई संभावना को वापस लौटाता हैP।
संदर्भ के लिए, overनिम्नानुसार परिभाषित किया जा सकता है (छद्मकोश में):
over(f, uniform(a, b)):
if f <= a: return 1.0
else if f >= b: return 0.0
else: return (b - f)/(b - a)
over(f, blend(P, Q, R)):
p = over(0.0, P)
return p*over(f, Q) + (1-p)*over(f, R)
आप मान सकते हैं कि सभी संभावना को देखते हुए वितरण करने के लिए overका उपयोग कर निर्माण कर रहे हैं uniformऔर blend, और करने के लिए इसे खिलाने के लिए है कि केवल एक चीज एक उपयोगकर्ता एक प्रायिकता वितरण के साथ क्या करने जा रहा है है blendया over। आप वितरण का प्रतिनिधित्व करने के लिए किसी भी सुविधाजनक डेटाटाइप का उपयोग कर सकते हैं: संख्याओं, तारों, कस्टम ऑब्जेक्ट्स आदि की सूची। केवल महत्वपूर्ण बात यह है कि एपीआई सही ढंग से काम करता है। इसके अलावा, आपका कार्यान्वयन नियतात्मक होना चाहिए, हमेशा एक ही इनपुट के लिए एक ही आउटपुट वापस करने के अर्थ में।
परीक्षण के मामलों
इन परीक्षण मामलों पर दशमलव बिंदु के बाद आपका आउटपुट मान कम से कम दो अंकों तक सही होना चाहिए।
over(4.356, uniform(-4.873, 2.441)) -> 0.0
over(2.226, uniform(-1.922, 2.664)) -> 0.09550806803314438
over(-4.353, uniform(-7.929, -0.823)) -> 0.49676329862088375
over(-2.491, uniform(-0.340, 6.453)) -> 1.0
over(0.738, blend(uniform(-5.233, 3.384), uniform(2.767, 8.329), uniform(-2.769, 6.497))) -> 0.7701533851999125
over(-3.577, blend(uniform(-3.159, 0.070), blend(blend(uniform(-4.996, 4.851), uniform(-7.516, 1.455), uniform(-0.931, 7.292)), blend(uniform(-5.437, -0.738), uniform(-8.272, -2.316), uniform(-3.225, 1.201)), uniform(3.097, 6.792)), uniform(-8.215, 0.817))) -> 0.4976245638164541
over(3.243, blend(blend(uniform(-4.909, 2.003), uniform(-4.158, 4.622), blend(uniform(0.572, 5.874), uniform(-0.573, 4.716), blend(uniform(-5.279, 3.702), uniform(-6.564, 1.373), uniform(-6.585, 2.802)))), uniform(-3.148, 2.015), blend(uniform(-6.235, -5.629), uniform(-4.647, -1.056), uniform(-0.384, 2.050)))) -> 0.0
over(-3.020, blend(blend(uniform(-0.080, 6.148), blend(uniform(1.691, 6.439), uniform(-7.086, 2.158), uniform(3.423, 6.773)), uniform(-1.780, 2.381)), blend(uniform(-1.754, 1.943), uniform(-0.046, 6.327), blend(uniform(-6.667, 2.543), uniform(0.656, 7.903), blend(uniform(-8.673, 3.639), uniform(-7.606, 1.435), uniform(-5.138, -2.409)))), uniform(-8.008, -0.317))) -> 0.4487803553043079