সিজেম, 16 14 13 বাইট
0{Kmr(+esmr}g
এটি খুব দীর্ঘ সময়ের জন্য চলবে , কারণ লুপটি শেষ হওয়া উচিত কিনা তা নির্ধারণ করতে এটি বর্তমান টাইমস্ট্যাম্প (10 12 এর ক্রম অনুসারে ) ব্যবহার করে। আমি এটিকে জমা হিসাবে ব্যবহার করছি, কারণ এটি সবচেয়ে কম, তবে দুটি 14-বাইট বিকল্প রয়েছে, যার নিজস্ব যোগ্যতা রয়েছে:
0{esmr(+esmr}g
এই এক না , PRNG সময়কালের দ্বারা সীমাবদ্ধ পরিসর থেকে সব এলোমেলো সংখ্যার বর্তমান টাইমস্ট্যাম্পের উপর নির্ভর করে। সুতরাং, এটি যেকোন সংখ্যক উত্পাদন করতে সক্ষম হওয়া উচিত, যদিও নেতিবাচক, বা এমনকি ছোট ধনাত্মক সংখ্যার জন্য সম্ভাব্যতা খুব কম।
নীচে একটি সমমানের সংস্করণ যা 3e5
টাইমস্ট্যাম্পের পরিবর্তে ব্যবহার করে। এবং 20
প্রথম ব্যাপ্তির জন্য (13-বাইট জমা হিসাবে)। এটি অনেক দ্রুত এবং সমস্ত নিয়ম মেনে চলে। যুক্তিসঙ্গত রানটাইম এবং ছোট কোড-আকার রাখার সময় 1,000,000 এরও বেশি সংখ্যার জন্য 50% সম্ভাব্যতা পাওয়া সীমাবদ্ধ ক্ষেত্রে এটি case ব্যাখ্যা এবং গাণিতিক ন্যায়সঙ্গততা এই সংস্করণটি উল্লেখ করে:
0{Kmr(+3e5mr}g
এটি চালাতে সাধারণত কয়েক সেকেন্ড সময় নেয়। আপনি 5
একটি সঙ্গে প্রতিস্থাপন করতে পারেন2
এটা এমনকি দ্রুত রান করতে। তবে 50% সম্ভাব্যতার প্রয়োজনীয়তা কেবলমাত্র 1,000,000 এর পরিবর্তে 1000 এর জন্য পূরণ করা হবে।
আমি 0 এ শুরু করছি Then তারপরে আমি একটি লুপ পেয়েছি, যা আমি সম্ভাবনা 1 / (3 * 10 5 ) এর সাথে ভেঙে ফেলেছি । সেই লুপটির মধ্যে আমি আমার চলমান মোটের সাথে -1 এবং 18 (সমেত) এর মধ্যে একটি এলোমেলো পূর্ণসংখ্যা যুক্ত করি। সীমাবদ্ধ (ছোট হলেও) সম্ভাবনা রয়েছে যে প্রতিটি পূর্ণসংখ্যার আউটপুট হবে, ইতিবাচক পূর্ণসংখ্যার নেতিবাচকগুলির চেয়ে অনেক বেশি সম্ভাবনা রয়েছে (আমি মনে করি না যে আপনি আপনার জীবদ্দশায় একটি নেতিবাচক দেখতে পাবেন)। এত ছোট সম্ভাবনা নিয়ে বেরিয়ে আসা এবং বেশিরভাগ সময় বাড়ানো (এবং বিয়োগের চেয়ে আরও অনেক কিছু যোগ করা) নিশ্চিত করে যে আমরা সাধারণত ১,০০,০০০ ছাড়িয়ে যাব।
0 "Push a 0.";
{ }g "Do while...";
Kmr "Get a random integer in 0..19.";
( "Decrement to give -1..18.";
+ "Add.";
3e5mr "Get a random integer in 0..299,999. Aborts if this is 0.";
কিছু গাণিতিক ন্যায়সঙ্গততা:
- প্রতিটি পদক্ষেপে আমরা গড়ে 8.5 যোগ করি।
- ১,০০,০০০ এ পেতে আমাদের এই পদক্ষেপগুলির ১১7,,,7 প্রয়োজন।
সম্ভাব্যতা যা আমরা এই সংখ্যার পদক্ষেপের চেয়ে কম করব
sum(n=0..117,646) (299,999/300,000)^n * 1/300,000
যা মূল্যায়ন 0.324402
। সুতরাং, প্রায় দুই তৃতীয়াংশ ক্ষেত্রে আমরা আরও ১১7,,64 steps পদক্ষেপ নেব এবং সহজেই প্রতি এক হাজারে পদক্ষেপ নেব।
- (দ্রষ্টব্য যে এটি যথাযথ সম্ভাবনা নয়, কারণ average গড়ে .5.৫ সম্পর্কে কিছুটা ওঠানামা হবে তবে ৫০% পেতে আমাদের ১১ 11,6466 পেরিয়ে প্রায় ২১০,০০০ পদক্ষেপে যেতে হবে।)
- যদি সন্দেহ হয় তবে আমরা সহজেই সমাপ্তির সম্ভাবনার ডিনোমিনেটরটিকে
9e9
কোনও বাইট না যোগ করে (তবে রানটাইমের বছরগুলি) না করে সহজেই উড়িয়ে দিতে পারি ।
... বা 11 বাইট?
অবশেষে, একটি 11 বাইট সংস্করণ রয়েছে, যা পিআরএনজি সময়কালেও সীমাবদ্ধ নয়, তবে প্রতিবার স্মৃতি থেকে খুব বেশি চলে যাবে। এটি প্রতিটি পুনরাবৃত্তির জন্য কেবল একটি এলোমেলো সংখ্যা তৈরি করে (টাইমস্ট্যাম্পের ভিত্তিতে) এবং এটি বৃদ্ধি এবং সমাপ্তির জন্য উভয়ই ব্যবহার করে। প্রতিটি পুনরাবৃত্তির ফলাফল স্ট্যাকের মধ্যে থেকে যায় এবং কেবল শেষে সংক্ষেপিত হয়। এই ধারণার জন্য ডেনিসকে ধন্যবাদ:
{esmr(}h]:+