ধরা যাক আপনার একটি 20-পক্ষের ডাই আছে। আপনি শেষ পর্যন্ত সমস্ত 20 টি মানকে রোল করার আগে আপনি সেই ডোলটি শুরু করেন এবং কয়েক ডজন বার এটি রোল করতে হবে। আপনি অবাক হন, সমস্ত 20 টি মান দেখার 50% সুযোগ পাওয়ার আগে আমার কতগুলি রোলগুলির প্রয়োজন? এবং চারপাশে n
ঘূর্ণায়মান হওয়ার আগে আমাকে কতটা রাইডের মরার রোল দরকার n
?
কিছু গবেষণা করার পরে, আপনি খুঁজে পেতে পারেন যে রোলসের পরে সমস্ত মান রোল করার সম্ভাবনা গণনা করার জন্য একটি সূত্র বিদ্যমান ।n
r
P(r, n) = n! * S(r, n) / n**r
যেখানে দ্বিতীয় ধরণের স্ট্র্লিং সংখ্যাকেS(a, b)
বোঝায় , এন অবজেক্টের একটি সেট (প্রতিটি রোল) কে খালি খালি সাবসেটে (প্রতিটি পাশ) বিভক্ত করার উপায়গুলির সংখ্যা।
আপনি OEIS ক্রমটিও খুঁজে পাবেন , যা আমরা কল করব, যা R(n)
সর্বনিম্ন r
যেখানে P(r, n)
কমপক্ষে 50% রয়েছে তার সাথে মিল রাখে। চ্যালেঞ্জটি হ'ল n
এই সিকোয়েন্সের তম শব্দটি যত দ্রুত সম্ভব গণনা করা ।
চ্যালেঞ্জ
- দেওয়া হয়েছে
n
, সবচেয়ে ছোটr
যেখানে 50 বা এরP(r, n)
চেয়ে বড় বা সমান এটি সন্ধান করুন0.5
। - আপনার কোডটি তাত্ত্বিকভাবে কোনও অ-নেতিবাচক পূর্ণসংখ্যাকে
n
ইনপুট হিসাবে পরিচালনা করতে হবে, তবে আমরা কেবলমাত্র আপনার কোডের সীমাতে পরীক্ষা করব1 <= n <= 1000000
। - স্কোরিং জন্য, আমরা হতে হবে মোট সময় চালানোর জন্য প্রয়োজনীয় নেওয়া
R(n)
ইনপুট উপর1
মাধ্যমে10000
। - আমরা আপনার সমাধানগুলি আমাদের সংস্করণে চলছে দ্বারা ঠিক থাকে তাহলে চেক করবে
R(n)
আপনার আউটপুট দেখতে যদিP(your_output, n) >= 0.5
এবংP(your_output - 1, n) < 0.5
, অর্থাত্ যে আপনার আউটপুট আসলে সবচেয়ে ছোটr
একটি প্রদত্ত জন্যn
। S(a, b)
আপনার সমাধানের জন্য আপনি কোনও সংজ্ঞা ব্যবহার করতে পারেন । উইকিপিডিয়ায় বেশ কয়েকটি সংজ্ঞা রয়েছে যা এখানে সহায়ক হতে পারে।- আপনি নিজের সমাধানগুলিতে বিল্ট-ইনগুলি ব্যবহার করতে পারেন, যা গণনা করে
S(a, b)
বা এমনকিP(r, n)
সরাসরি গণনা করে এমনগুলিও অন্তর্ভুক্ত। - আপনি এক হাজার মান
R(n)
এবং এক মিলিয়ন স্ট্র্লিং সংখ্যা পর্যন্ত হার্ডকোড করতে পারেন , যদিও এর মধ্যে দুটিও সীমাবদ্ধ নয়, এবং যদি আপনি তাদের উত্থাপন বা হ্রাস করার জন্য দৃ a়প্রত্যয়ী যুক্তি করতে পারেন তবে পরিবর্তন করা যেতে পারে। - আপনি প্রতি সম্ভব চেক করতে হবে না
r
মধ্যেn
এবংr
আমরা খুঁজছেন, কিন্তু আপনি ক্ষুদ্রতম খোঁজার প্রয়োজনীয়তা নাr
এবং ঠিক কোন নাr
যেখানেP(r, n) >= 0.5
। - আপনার প্রোগ্রামটি অবশ্যই এমন একটি ভাষা ব্যবহার করবে যা উইন্ডোজ 10 এ অবাধে চলমান।
কম্পিউটার এর স্পেসিফিকেশনের যে আপনার সমাধানগুলি পরীক্ষা হবে i7 4790k, 8 GB RAM
। পরীক্ষার জন্য তার কম্পিউটার সরবরাহ করার জন্য @ ডিজেএমসিমেহেমকে ধন্যবাদ জানাই । রেফারেন্সের জন্য আপনার নিজের অফিশিয়াল সময় যুক্ত করতে নির্দ্বিধায় মনে করুন , তবে ডিজে এটি পরীক্ষা করার পরে অফিসিয়াল সময় পরে দেওয়া হবে।
পরীক্ষার মামলা
n R(n)
1 1
2 2
3 5
4 7
5 10
6 13
20 67 # our 20-sided die
52 225 # how many cards from a huge uniformly random pile until we get a full deck
100 497
366 2294 # number of people for to get 366 distinct birthdays
1000 7274
2000 15934
5000 44418
10000 95768
100000 1187943
1000000 14182022
আপনার যদি কোনও প্রশ্ন বা পরামর্শ থাকে তবে আমাকে জানান। শুভকামনা এবং ভাল অপ্টিমাইজিং!