একটি ভাঙ্গা র্যান্ডম ফাংশন ঠিক করুন


18

একটি বন্ধুর কাছে তাদের কম্পিউটারে একটি অ্যাড-অন কার্ড থাকে যা 1 থেকে 5 সমেত এক নিখুঁত এলোমেলো সংখ্যা তৈরি করে। দুর্ভাগ্যক্রমে, তারা কোনওভাবে এটিতে কোলা ছড়িয়েছিল, এবং এটি এখন 1 থেকে 4 পর্যন্ত সমস্ত সংখ্যার জন্য কেবল 2 এর উত্পন্ন করে Luck 1, 3 বা 4 এর উত্পন্ন। এই এলোমেলো উত্সটি ব্যবহার করে (এটিকে কল করুন BrokenRand()বা অনুরূপ কিছু), একটি কার্যক্ষম র্যান্ডম সংখ্যার জেনারেটর লিখুন যা মূল উত্সের মতো একই নিখুঁত এলোমেলোতার সাথে সমান 20% সম্ভাব্যতার সাথে প্রতিটি 1 থেকে 5 পর্যন্ত সংখ্যা তৈরি করে।

সংক্ষিপ্ততম প্রোগ্রামের জয়। BrokenRandবয়সের পয়েন্টগুলি বয়স এবং লিঙ্গ দ্বারা বিচ্ছিন্নভাবে - জনগণের দ্বারা নির্বাচিত গ্রাহকসেবার ফোকাস পরামর্শ দ্বারা নিরপেক্ষভাবে নিরপেক্ষভাবে কল করা সর্বনিম্ন সংখ্যার জন্য পুরষ্কার প্রাপ্ত me

উত্তর:


10

জাভাস্ক্রিপ্ট - 69 টি অক্ষর

এটি নিরপেক্ষ বিট উত্পন্ন করতে ভ্যান নিউম্যান এক্সট্র্যাক্টর ব্যবহার করে ; হটবিটস ওয়েবসাইটে সাধারণ অ্যালগরিদমও বর্ণিত হয় । ০ থেকে from পর্যন্ত একটি সংখ্যা গঠনের জন্য তিনটি বিট ব্যবহার করা হয় 5 এবং তারপরের সমস্ত সংখ্যা বাতিল করা হয় এবং মুদ্রণের আগে বাকি প্রতিটিটিতে 1 যুক্ত করা হয়। আমি এটি ভারী পক্ষপাতদুষ্ট নয় তা দেখানোর জন্য একটি সিমুলেশন তৈরি করেছিলাম ।

r()আরএনজি অ্যাক্সেস করতে আপনার নিজের ফাংশন সরবরাহ করতে হবে।

 for(;;v<5&&alert(v+1))for(v=i=0;i<3;a-b&&(v*=2,v+=a<b,i++))b=r(a=r())

এই সত্যিই ভাল কাজ হয়! আমি পছন্দ করি আপনি কীভাবে ইনক্রিমেন্ট মান শর্ট সার্কিট করেন।
snmcdonald

ব্রোকেনর্যান্ডে কল হ্রাস করতে আপনি 7 টি বিট তৈরি করতে এবং 3 টি এলোমেলো সংখ্যা বের করতে পারতেন, তবে এতে আরও কিছু স্ট্রোক
লাগতে পারে

5

স্কেল cha৯ টি চর:

// preparation: 
val r = util.Random 
def defektRNG = if (r.nextInt (5) == 0) 5 else 2 

(1 to 20).foreach (_ => print (" " + defektRNG))
// first impression:
// 2 2 2 2 2 2 2 5 2 2 5 2 2 2 5 2 2 2 2 2

def rnd : Int = { val k = (1 to 5).map (_ => defektRNG)
  if (k.sum == 13) k.findIndexOf (_ == 5) + 1 else rnd } 

// first impression:
(1 to 20).foreach (_ => print (" " + rnd))             
// 3 3 2 3 5 2 2 5 1 1 3 4 3 2 5 3 3 1 5 4
// control:
(1 to 50000).map (_ => rnd).groupBy (identity) .map (_._2.length) 
// scala.collection.immutable.Iterable[Int] = List(10151, 9997, 9971, 9955, 9926)

এখন আসল গল্ফের জন্য, পয়েন্ট-কেএনআরএনজি ওরফে ভাঙ্গা র্যান্ডের নাম পরিবর্তন করা হয়েছে খ।

def r:Int={val k=(1 to 5).map(_=>b)
if(k.sum==13)k.findIndexOf(_==5)+1 else r} 

এটি কীভাবে কাজ করে: বেশিরভাগ ক্ষেত্রে, বি 2s এর ক্রম দেয়। তবে আপনি বি তে 5 টি কল করলে আপনি প্রায়শই 4x2 এবং 1x5 এর ফলাফল দিয়ে শেষ হয়ে যাবেন এটি দ্বিতীয় সম্ভাব্য ঘটনা এবং এটি 5-2-2-2-2, 2-5-2-2 হতে পারে -2, 2-2-5-2-2-2, 2-2-2-5-2-2 এবং 2-2-2-2-5-5।

এর মিলগুলি 4, 2 + 5 = 13 হয় common প্রথম পাঁচটির সূচকটি কোনও বৈধ এলোমেলো সংখ্যার সংজ্ঞা দিতে ব্যবহৃত হতে পারে। যদি 5 এরও কম বা কম হয়, যোগফল বৃহত্তর বা নিম্ন 13 হয় তবে পুনরাবৃত্তি করুন।

'Rnd' ওরফে 'আর' এর একটি কাউন্টার দেখিয়ে দিতে পারে যে সংখ্যাগুলি তৈরি করতে গড়ে কতগুলি কল প্রয়োজন। 50 000 এলোমেলো সংখ্যার জন্য 121 তে 200 কল রয়েছে, এটি চিত্তাকর্ষক নয়। :)


3

> <> (ফিশ) - 55 বাইট

তার স্কেলার উত্তরে @ ব্যবহারকারীর অজানা হিসাবে একই অ্যালগরিদম ব্যবহার করতে আপডেট হয়েছে

? <বনাম = D + &: I & +: I & +: I & +: I &: আমি
 0
 > 1 + $ 5 (vnao;
 ^ <

এটি ভাঙা জেনারেটর স্টিডিনের সাথে সংযুক্ত হওয়ার প্রত্যাশা করে; আমি ব্যবহৃত পাইগন স্ক্রিপ্ট এখানে । কোডটি বর্তমান ফিশ স্পেকের সাথে মেলে তবে আমি পুরানো দোভাষী দের পরিবর্তিত সংস্করণ ব্যবহার করেছি ।

bash:$ for i in $(seq 1000); do ./bad_rand.py | ./myfish.py rand.fish; done >res.txt
bash:$ for i in $(seq 5); do echo -n "$i : "; grep -c $i res.txt; done
1 : 193
2 : 204
3 : 198
4 : 206
5 : 199

আমি একটি বড় নমুনা করব তবে এটি ধীর।


2

গল্ফস্ক্রিপ্ট, 23 বাইট

দেরিতে উত্তর, তবে যেহেতু এটি প্রথম পৃষ্ঠায় পপ আপ হওয়ার জন্য ঘটেছে ...

0{;[{r}5*].5?)\5-,4-}do

ব্যবহারকারীর অজানা এর স্কালা সমাধান হিসাবে একই অ্যালগরিদম ব্যবহার করে । ধরে নেওয়া হয় যে পক্ষপাতদুষ্ট এলোমেলো নম্বর জেনারেটর নামের একটি গল্ফস্ক্রিপ্ট সাব্রোটিন দেওয়া হয়েছে r; আপনি একটি উপযুক্ত পক্ষপাতদুষ্ট আরএনজি নিজেকে সংজ্ঞায়িত করতে পারেন যেমন:

{5rand!3*2+}:r;

পক্ষপাতের অভাব প্রদর্শন করে একটি দ্রুত পরীক্ষা এখানে's দুর্ভাগ্যক্রমে, অনলাইন গল্ফস্ক্রিপ্ট সার্ভারটি ধীর ধরণের, তাই সময়মতো এটি সম্পূর্ণ করার জন্য আমাকে বিক্ষোভটি মাত্র 100 টি নমুনায় কেটে ফেলতে হয়েছিল। সঙ্গে স্থানীয়ভাবে পরীক্ষা চলছে এমন GolfScript ব্যাখ্যাকারী , বৃদ্ধি চেষ্টা 100*করতে 1000*বা এমনকি 10000*

(গল্ফস্ক্রিপ্ট সার্ভারটিও মাঝে মাঝে এলোমেলোভাবে হিমশীতল হয়ে যায় এবং যাইহোক সময় বেরিয়ে যায় this এটি যদি আপনার হয়ে থাকে তবে আবার চেষ্টা করে সাধারণত এটি সমাধান করে other এটি অন্য কোডের সাথেও ঘটে এবং এটি কেবল নিজের কম্পিউটারে নয় সার্ভারে ঘটে তাই আমি আত্মবিশ্বাসী এটি আমার কোড নিয়ে নয় সার্ভারের সাথে সমস্যা)


-1

জাভাস্ক্রিপ্ট, পাঠযোগ্যতা ওরফে অপ্টিমাইজেশন হ্রাস না করে 160 টি অক্ষর

function giveRandom(){
    var result = Math.floor(5 * Math.random()) + 1;
    while(BrockenRand() != 5){
        result = Math.floor(5 * Math.random()) + 1;
    }
    return result;
}

@ স্নকমডোনাল্ড- এর মধ্যে বেশ কয়েকটি টাইপো নয়, এটি একটি নিখুঁত র্যান্ডম জেনারেটর দ্বারা অনুমোদিত জেএসকে উন্নত করার উপায় মাত্র (সম্পূর্ণ র্যান্ডম!) 20% ফলাফল
www0z0k

BrockenBand()তাহলে কি তা বোঝানোর জন্য যত্নশীল ?
মতিন উলহাক

6
আমি মনে করি আপনি বিন্দুটি মিস করেছেন
cthom06

@ মন্টু - অর্থBrockenRand
www0z0k

এইভাবে কয়েকটি বাইট সংরক্ষণ করুন:function giveRandom(){return Math.ceil(Math.random()*5)}
user300375
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.