ভূমিকা
এই চ্যালেঞ্জে, আপনার কাজটি হ'ল সাধারণ কার্যকারিতা সংকলন কার্যকর করা যা একসাথে সাধারণ সম্ভাবনা বিতরণের জন্য একটি ব্যবহারযোগ্য মিনি-গ্রন্থাগার গঠন করে। লোকেরা এখানে ব্যবহার করতে পছন্দ করে এমন আরও কয়েকটি গুরূত্বপূর্ণ ভাষার কিছু সমন্বিত করতে, নিম্নলিখিত প্রয়োগগুলি গ্রহণযোগ্য:
- নামযুক্ত ফাংশনগুলির (বা নিকটবর্তী সমতুল্য) সংকলন সংজ্ঞায়িত করে একটি কোড স্নিপেট।
- নাম প্রকাশিত বা বেনাম ফাংশনগুলিতে (বা নিকটতম সমতুল্য) মূল্যায়নের মত প্রকাশের সংকলন।
- একক অভিব্যক্তি যা বেশ কয়েকটি নামযুক্ত বা বেনাম ফাংশন (বা নিকটতম সমমান) এর মূল্যায়ন করে।
- কমান্ড লাইন, এসটিডিআইএন বা নিকটতম সমতুল্য এবং এসটিডিআউট বা নিকটতম সমতুল্যে আউটপুট গ্রহণ করে এমন স্বাধীন প্রোগ্রামগুলির সংকলন।
কাজগুলি
আপনি চাইলে সংক্ষিপ্ত নাম ব্যবহার করে নিম্নলিখিত ফাংশনগুলি বাস্তবায়ন করবেন।
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