परिचय
इस चुनौती में, आपका कार्य सरल कार्यों के संग्रह को लागू करना है जो एक साथ सरल संभाव्यता वितरण के लिए एक प्रयोग करने योग्य मिनी-पुस्तकालय बनाते हैं। कुछ अधिक गूढ़ भाषाओं को समायोजित करने के लिए लोग यहां उपयोग करना पसंद करते हैं, निम्नलिखित कार्यान्वयन स्वीकार्य हैं:
- एक कोड स्निपेट नामित कार्यों (या निकटतम समकक्ष) के संग्रह को परिभाषित करता है।
- अभिव्यक्तियों का एक संग्रह जो नामित या अनाम कार्यों (या निकटतम समकक्ष) का मूल्यांकन करता है।
- एक एकल अभिव्यक्ति जो कई नामित या अनाम फ़ंक्शन (या निकटतम समकक्ष) का मूल्यांकन करती है।
- कमांड लाइन, एसटीडीआईएन या निकटतम समकक्ष से इनपुट लेने वाले स्वतंत्र कार्यक्रमों का एक संग्रह, और एसटीडीयूटी या निकटतम समकक्ष के लिए आउटपुट।
कार्य करता है
यदि वांछित हो, तो आप निम्न नामों को लागू करेंगे।
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