अपने हाथों से रैंडम से प्रेरित :
लक्ष्य
इस चुनौती का लक्ष्य एक ऐसा प्रोग्राम लिखना है जो एक छद्म आयामी बिट स्ट्रीम उत्पन्न करता है, जो कि 1s और 0s का एक तार है जो विशुद्ध रूप से यादृच्छिक प्रतीत होता है, लेकिन वास्तव में एक नियतात्मक तरीके से उत्पन्न होता है। आपके कार्यक्रम को 1 और 0s (वैकल्पिक व्हाट्सएप के साथ) का एक स्ट्रिंग आउटपुट करना चाहिए और निम्नलिखित आवश्यकताओं को पारित करना चाहिए:
- असीमित समय और मेमोरी को देखते हुए, आपके प्रोग्राम को 1s और 0s के एक स्ट्रिंग को हमेशा के लिए आउटपुट करना जारी रखना चाहिए
- आपका कार्यक्रम एक उचित मशीन पर लगभग एक मिनट में 1000 से अधिक यादृच्छिक बिट्स का उत्पादन करना चाहिए। यदि यह आवश्यकता असंभव है, तो मैं इसे कम कर दूंगा।
- बिट्स की स्ट्रिंग दोहरा सकती है, लेकिन रिपीटिंग सेक्शन की लंबाई 1000 बिट्स से अधिक होनी चाहिए।
- बिट्स की स्ट्रिंग को यथासंभव यादृच्छिकता परीक्षणों (नीचे वर्णित) से गुजरना होगा।
- कार्यक्रम को किसी भी बाहरी स्रोत से कोई इनपुट नहीं लेना चाहिए या किसी भी अंतर्निहित रैंड () - जैसे फ़ंक्शन का उपयोग नहीं करना चाहिए।
- उपरोक्त आवश्यकता के कारण, प्रोग्राम को हर बार बिट के समान सटीक स्ट्रिंग का उत्पादन करना चाहिए जो इसे चलाया जाता है।
रैंडम टेस्ट # 1
दृश्य निरीक्षण पर किसी भी स्पष्ट पैटर्न को छद्म आयामी बिट्स की स्ट्रिंग में शामिल नहीं करना चाहिए।
रैंडमनेस टेस्ट # 2 (टिप्पणियों के आधार पर परिवर्तन के अधीन)
बिट्स की स्ट्रिंग में 1s और 0s का समान वितरण होना चाहिए। इसे (और अन्य चीजों को भी) जांचने के लिए, बिट्स की धारा उन खंडों में टूट जाती है जो 3 बिट लंबे होते हैं, जैसे 101|111|001
।
इन सभी सेगमेंट में से, 1/8 में तीन 1s और कोई 0s नहीं होना चाहिए, उनमें से 3/8 में दो 1s और एक 0, 3/8 होने चाहिए उनमें से 1 1 और 2 0, और 1/8 होना चाहिए। उनमें से कोई 1s और तीन 0s होना चाहिए।
यादृच्छिकता टेस्ट # 3
एक "रन" को बिट्स की एक निरंतर श्रृंखला के रूप में परिभाषित किया गया है जो सभी का समान मूल्य है। स्ट्रिंग 1001001110
में आकार 1 ( 1..1.....0
), आकार 2 के दो रन ( .00.00....
) और आकार 3 ( ......111.
) का एक रन होता है । जो सूचना चलती है वह ओवरलैप नहीं होती है।
1000 यादृच्छिक बिट्स की एक स्ट्रिंग में, आकार 1 के लगभग 250 रन, आकार 2 के 125 रन, आकार 3 के 62 रन आदि होना चाहिए। सामान्य तौर पर, रन आकार R के लिए, 1000/(2**(R+1))
उस आकार के लगभग रन होने चाहिए ।
यादृच्छिकता टेस्ट # 4
पहले 840 बिट्स को 420 बिट्स के दो हिस्सों में विभाजित किया गया है। पहली छमाही पर प्रत्येक बिट की तुलना दूसरी छमाही पर संबंधित बिट से की जाती है। दो बिट्स को लगभग पचास प्रतिशत समय से मेल खाना चाहिए।
यहाँ एक पर्ल प्रोग्राम का स्रोत कोड है जो 2 के माध्यम से 2 परीक्षण करता है। अब तक, यह आवश्यक है कि बिट्स के स्ट्रिंग में कोई व्हाट्सएप न हो।
उद्देश्य जीत का मानदंड समय!
विजेता वह प्रोग्राम है जो 6 आवश्यकताओं में से सभी को पास करता है और सभी यादृच्छिकता परीक्षणों को उस डिग्री तक पहुंचाता है जो यादृच्छिकता के साथ अविभाज्य है। यदि कई कार्यक्रम इसे पूरा करते हैं, तो जो सबसे लंबे समय तक दोहराता है वह जीत जाएगा। यदि कई कार्यक्रम इसे पूरा करते हैं, तो मुझे टाई-ब्रेकर के रूप में कार्य करने के लिए अधिक यादृच्छिकता परीक्षण ढूंढना पड़ सकता है।