में यादृच्छिकता की गुणवत्ता में सुधार करना आप एक कालकोठरी में खड़े हैं। आपके सामने, स्तर 5 नेरड का एक समूह है। वे चाहते हैं कि आप उनके लिए एक डंगऑन और ड्रेगन अभियान चलाएं।उद्देश्य-सी
आप कुछ सत्र चलाते हैं, आपके खिलाड़ी स्तर पर हैं, और चीजें आम तौर पर सूजन होती हैं। हालांकि, मुकाबला थोड़ा धीमा है। आप उद्देश्य-सी के अपने +4 हेलबर्ड को खींचने का निर्णय लेते हैं और युद्ध में एनपीसी पासा रोलिंग स्वचालित करने के लिए एक आईपैड ऐप लिखते हैं। नरक आप की ओर बढ़ते हैं, खतरनाक रूप से। "एल्गोरिदमिक रूप से जेनरेट की गई संख्याएं," एक झुकाव, "सच यादृच्छिकता का खोखला अनुकरण है! आप हमारे पवित्र अभियान को अपने छद्म यादृच्छिक गंदगी से दबाने नहीं देंगे!"
आप उसे मनाने के लिए रोल करते हैं कि arc4random_uniform()
पर्याप्त से अधिक है ... और असफल। बेवकूफ सच यादृच्छिकता से कम कुछ भी के लिए व्यवस्थित होगा। वे आपको कैदी पकड़ते हैं क्योंकि आप अपने मैकबुक से बेहद चिपकते हैं, और एक वर्ग लिखते हैं जो random.org से डेटा पुनर्प्राप्त करता है।
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY/YYYY-MM-dd"];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@%@",
@"http://www.random.org/files/",
[formatter stringFromDate:[NSDate date]],
@".bin"]];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:
[NSURLRequest requestWithURL:url] delegate:self];
एक बार डेटा सहेजा गया है, तो आप डाउनलोड बाइट्स से यादृच्छिक संख्या, 0-255 की पीढ़ी की अनुमति देते हैं।
-(int) nextInt:(int)start end:(int)end
{
int upperBound = end - start + 1;
unsigned char result;
int maxModulo = 255 - (255 % upperBound);
do {
NSRange range = {index, sizeof(char)};
[randos getBytes:&result range:range];
index += sizeof(char);
} while (result > maxModulo); //avoid modulo bias
result = result % upperBound;
result += start;
return result;
}
नरक संतुष्ट प्रतीत होते हैं, लेकिन एक नया दुश्मन प्रकट होता है: एक और डंगऑन मास्टर! वह मांग करता है कि आप उसे अपने उद्देश्यों के लिए सॉफ्टवेयर की एक प्रति दें। समस्या स्पष्ट है - यदि आप दोनों उसी दिन से random.org डेटा का उपयोग करते हैं, तो आपको पासा रोल का एक ही सेट मिल जाएगा!
तो मेरा प्रश्न इस प्रकार है: मैं random.org डेटा को कैसे संशोधित कर सकता हूं जैसे कि यह "वास्तविक यादृच्छिकता" जैसी कुछ चीज़ बनाए रखेगा लेकिन कार्यक्रम के प्रत्येक उदाहरण में अलग होगा? मैं एक समाधान की कल्पना कर सकता हूं जो उपयोगकर्ता (like TrueCrypt does) से कुछ (purportedly यादृच्छिक) टचपैड आंदोलनों को प्राप्त करने में सक्षम होगा, लेकिन एक बार जब मैं स्थिर रहता हूं तो मुझे यकीन है कि वहां से कहाँ जाना है। किसी भी तरह से मेरे निरंतर उपयोग कर सभी संख्या हैश? इससे बड़ी संख्या में उत्पादन होगा; क्या मैं सांख्यिकीय रूप से ठीक हूं अगर मैं बस पासा रोल के नीचे छोटा या छोटा कर दूं? मुझे नहीं पता कि एल्गोरिदमिक कदम क्या हैं।
हां! यह सही रहेगा। हमें क्रिप्टोग्राफी मिलती है और हमें आउटपुट पर नियंत्रण रखने की भावना मिलती है। अन्य उत्तरों स्पष्ट करते हैं कि मेरे खिलाड़ी वास्तव में नहीं समझते हैं कि यादृच्छिक संख्याएं कैसे उत्पन्न होती हैं, लेकिन उन्हें क्यों सिखाएं जब मैं उन्हें खुश कर सकता हूं? – iameli
इससे भी बेहतर, क्या उपयोगकर्ता यह सब करते हैं और बेहतर "यादृच्छिक" संख्या जनरेटर जैसे arc4random या SecRandomCopyBytes का उपयोग करते हैं। सिस्टम में बेहतर और अधिक एन्ट्रॉपी स्रोत हैं। तो, यह सोचकर कि एक "घर उगाया गया" समाधान अच्छी तरह से पेश किए गए पेशेवर डिजाइन सिस्टम से बेहतर हो सकता है, वह सिर्फ पागल है। – zaph
@ कोकोआफू: मुझे नहीं लगता कि आप इस एप्लिकेशन के उद्देश्य को समझते हैं। इसके दो उद्देश्य हैं: 1) एक समझदार, मूर्त तंत्र है जिसे आसानी से समझाया जा सकता है, 2) आरपीजी के लिए पर्याप्त संख्याएं उत्पन्न करें। यह सोचकर कि घर पर कुछ दोस्तों के साथ आरपीजी खेलने के लिए आपको एक अनुभवी, पेशेवर रूप से डिजाइन किए गए पीआरएनजी की जरूरत है, वह सिर्फ पागल है। (एक साइड नोट के रूप में, अधिकांश आरपीजी खिलाड़ियों में काफी चौंकाने वाली पूर्वाग्रहों के साथ पासा होता है।) इसके अलावा, एसएचए -2 एक उत्कृष्ट पीआरएनजी बनाता है। –