Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी में रैंडम नंबर जेनरेट करना

रैंडम नंबर गेमिंग, एन्क्रिप्शन और बिल्डिंग सिमुलेशन जैसे विभिन्न उद्देश्यों के लिए उपयोगी होते हैं। तकनीकी रूप से, कंप्यूटर विशुद्ध रूप से गणना द्वारा यादृच्छिक संख्याएँ उत्पन्न नहीं कर सकते हैं। किसी भी नियतात्मक उपकरण पर वास्तव में यादृच्छिक संख्याएँ उत्पन्न करना मौलिक रूप से असंभव है। आप जिस सर्वश्रेष्ठ की उम्मीद कर सकते हैं वह है छद्म यादृच्छिक संख्याएं, संख्याओं की एक धारा जो ऐसा प्रतीत होती है मानो वे बेतरतीब ढंग से उत्पन्न हुई हों।

इस लेख में, हम रूबी में रैंडम नंबर जेनरेट करने के विभिन्न तरीकों को देखेंगे।

कर्नेल#रैंड के साथ रैंडम नंबर जेनरेट करना

आरंभ करने के लिए, आइए rand . के साथ यादृच्छिक संख्याएं उत्पन्न करें तरीका। जब विधि को बिना किसी तर्क के कहा जाता है, तो यह एक फ्लोट देता है जो 0.0 से अधिक या बराबर और 1.0 से कम होता है।

rand()
> 0.7308136972953823

एक पूर्णांक प्राप्त करने के लिए, आप फ़ंक्शन के लिए एक पूर्णांक पास करते हैं। फ़ंक्शन एक यादृच्छिक पूर्णांक मान लौटाएगा जो 0 से अधिक या उसके बराबर है और फ़ंक्शन को दिए गए पूर्णांक से कम है। हर बार निम्नलिखित को चलाने पर, आपको एक संख्या मिलेगी जो 0 और 7 के बीच होगी।

rand(8)
> 5

किसी विशेष श्रेणी के भीतर यादृच्छिक संख्या के लिए, श्रेणी को rand . पर पास करें ।

निम्नलिखित एक समावेशी का उपयोग करता है निचली सीमा से यादृच्छिक संख्या उत्पन्न करने के लिए श्रेणी (1 ), ऊपरी सीमा तक (और शामिल) (10 .) )।

rand(1..10)
> 6

अगला उदाहरण गैर-समावेशी . का उपयोग करता है निचली सीमा से यादृच्छिक संख्या उत्पन्न करने के लिए श्रेणी, ऊपरी सीमा तक (लेकिन शामिल नहीं)।

rand(1...10)
> 9

सीमा फ़्लोटिंग पॉइंट मानों के बीच भी हो सकती है।

rand(1.5..3.0)
> 1.7494305393711571

आप rand . के साथ नकारात्मक सीमा सीमाओं का भी उपयोग कर सकते हैं ।

rand(-5..-1)
> -5

जैसा कि नीचे दिखाया गया है, एकल ऋणात्मक संख्याओं में उत्तीर्ण होना आश्चर्यजनक परिणाम दे सकता है।

rand(-100)
> 94
 
rand(-0.5)
> 0.7692627344737486

ऐसा इसलिए है क्योंकि तर्क के लिए n rand . में पास किया गया , rand यादृच्छिक संख्या 0 से (लेकिन शामिल नहीं) तक देता है n.to_i.abs . उपरोक्त उदाहरण के लिए (-100).to_i.abs 100 है और (-0.5).to_i.abs है 0 , इस प्रकार परिणामी यादृच्छिक संख्याएँ।

कॉलिंग rand(0) rand() को कॉल करने के समान है . आपको 0.0 और 1.0 के बीच यादृच्छिक संख्याएँ मिलेंगी (समावेशी नहीं)।

कर्नेल#srand के साथ प्रतिलिपि प्रस्तुत करने योग्य अनुक्रम उत्पन्न करना

यादृच्छिक संख्याएँ उत्पन्न करने की अगली विधि पर जाने से पहले, आइए पहले srand को देखें। समारोह।

Kernel#srand Kernel#rand . के लिए बीज सेट करता है . हम प्रोग्राम के विभिन्न रनों के बीच यादृच्छिक संख्याओं के दोहराने योग्य अनुक्रम उत्पन्न करने के लिए इसका उपयोग कर सकते हैं।

इसका अर्थ समझने के लिए, हमें पहले यह समझना होगा कि यादृच्छिक संख्याएँ कैसे उत्पन्न होती हैं।

बीज से "रैंडम" नंबर जेनरेट करना

जैसा कि पहले कहा गया है, कंप्यूटर पूरी तरह से गणना से वास्तव में यादृच्छिक संख्या उत्पन्न नहीं करते हैं। वे जो करते हैं वह संख्याओं का एक क्रम उत्पन्न करता है जो यादृच्छिक लगता है। ऐसा करने के लिए, कंप्यूटर एक बीज संख्या से शुरू होता है, जिसे वह कुछ एल्गोरिथम के माध्यम से चलाता है और फिर एक प्रतीत होता है यादृच्छिक आउटपुट को बाहर निकालता है।

बीज संख्या कंप्यूटर द्वारा विभिन्न तत्वों के संयोजन का उपयोग करके उत्पन्न की जाती है, उदा। टाइमस्टैम्प, कार्यक्रम की प्रक्रिया आईडी, आदि। चूंकि ये तत्व प्रत्येक अनुरोध के लिए एक यादृच्छिक संख्या उत्पन्न करने के लिए भिन्न होते हैं, बीज संख्या हमेशा भिन्न होगी, जो संख्याओं के एक अलग अनुक्रम का उत्पादन करेगी, इस प्रकार परिणामी यादृच्छिक संख्या आउटपुट। यदि आप एक ही बीज के साथ एल्गोरिदम चलाते हैं, तो आपको हर बार संख्याओं का एक ही क्रम मिलेगा। यह है Kernel#srand हमें करने की अनुमति देता है।

srand आमतौर पर परीक्षण में प्रयोग किया जाता है। यह आपके ऐप में परीक्षण कोड के लिए आसान हो सकता है जो यादृच्छिकता से संबंधित है, ऐसे मूल्यों के साथ जो यादृच्छिक हैं लेकिन अभी भी परीक्षण के लिए पर्याप्त अनुमानित हैं। यह बग को अलग करने या पुन:उत्पन्न करने में भी मदद कर सकता है।

नीचे हम srand . का उपयोग करते हैं बीज सेट करने के लिए और फिर rand . पर कॉल करें पहले कुछ अलग-अलग यादृच्छिक संख्याओं का उत्पादन करने के लिए और फिर यादृच्छिक संख्याओं के कुछ अनुक्रमों को उत्पन्न करने के लिए।

srand(777)
 
rand()
> 0.152663734901322
 
rand()
> 0.3023566097075212
 
10.times.map { rand(10) }
> [7, 1, 7, 4, 7, 9, 8, 7, 2, 0]
 
10.times.map { rand(10) }
> [1, 2, 4, 5, 7, 1, 7, 2, 2, 7]

अगर आप srand run चलाते हैं फिर से उसी बीज के साथ और वही कॉल करें जो हमने पहले की थीं, आप देखेंगे कि हमें वही रैंडम नंबर मिलते हैं।

srand(777)
 
rand()
> 0.152663734901322
 
rand()
> 0.3023566097075212
 
10.times.map { rand(10) }
> [7, 1, 7, 4, 7, 9, 8, 7, 2, 0]
 
10.times.map { rand(10) }
> [1, 2, 4, 5, 7, 1, 7, 2, 2, 7]

रैंडम के साथ रैंडम नंबर जेनरेट करना

आप रैंडम क्लास के साथ रैंडम नंबर भी जेनरेट कर सकते हैं।

वर्ग विधि rand Kernel#rand . की आधार कार्यक्षमता प्रदान करता है फ़्लोटिंग पॉइंट मानों के बेहतर संचालन के साथ।

Random.rand(1...10)
> 5

Kernel#rand के विपरीत , अगर Random.rand ऋणात्मक दिया गया है या 0 तर्क, यह एक ArgumentError उठाता है।

सामान्य वितरण के आधार पर यादृच्छिक संख्या उत्पन्न करना

वास्तविक दुनिया में, कई चीजें सामान्य वितरण का पालन करती हैं। यदि आपके पास मूल्यों की एक श्रृंखला है जिसके अंतर्गत कुछ आता है, तो शायद ही आपको सभी मूल्यों का समान वितरण मिलता है। अधिकतर, अधिकांश डेटा एक छोटी सीमा के भीतर गिरते हैं, जबकि एक छोटा प्रतिशत बड़ी सीमा के भीतर आता है। आइए एक उदाहरण के रूप में एक वयस्क व्यक्ति की ऊंचाई को लें। सबसे छोटी ऊंचाई 54.6 सेमी (21.5 इंच) दर्ज की गई है जबकि सबसे ऊंची 267 सेमी (8'9 ") है। यदि आप आबादी में पुरुषों की ऊंचाई का अनुकरण करने के लिए डेटा उत्पन्न करना चाहते हैं, तो हो सकता है कि आप rand इन सीमाओं के साथ। आप नहीं चाहते कि 8'9'' वाले आदमी के मिलने की प्रायिकता 6' वाले आदमी के समान हो, क्योंकि बाद वाला अधिक सामान्य है।

सामान्य वितरण का पालन करने वाली चीजों के अन्य उदाहरण हैं:

  • माप में त्रुटियां
  • रक्तचाप
  • टेस्ट स्कोर
  • वयस्क पुरुष/महिला का वजन

इस तरह के उपयोग के मामलों के लिए बेहतर यादृच्छिक संख्या उत्पन्न करने के लिए, आप rubystats . का उपयोग कर सकते हैं रत्न।

$ gem install rubystats
require 'rubystats'
 
adult_male_height = Rubystats::NormalDistribution.new(178, 10)
sample = 50.times.map { adult_male_height.rng.round(1) }
 
> [183.2, 169.5, 189.7, 171.9, 176.0, 179.3, 189.3, 175.3, 188.3, 190.0, 185.5, 182.8, 187.2, 191.6, 185.4, 178.4, 187.1, 183.3, 189.6, 179.7, 172.7, 174.4, 153.8, 197.4, 176.0, 174.6, 181.1, 182.0, 204.7, 185.2, 175.9, 167.7, 160.6, 170.5, 169.3, 160.6, 165.6, 166.4, 182.6, 179.7, 183.1, 171.9, 185.4, 175.4, 179.7, 176.9, 160.6, 173.8, 181.9, 190.2]

उपरोक्त में, हम पुरुषों के लिए औसत ऊंचाई (178cm) और 10cm के मानक विचलन को NormalDistribution.new पास करते हैं , इस सामान्य वितरण में आने वाले 50 मान उत्पन्न करने से पहले। यदि आप गणित के बारे में उत्सुक हैं, तो यह लेख आपको रूचि दे सकता है।

रैंडम राउंडअप

यह हमें इस चर्चा के अंत में लाता है। हमने रूबी में 'रैंडम' नंबर बनाने के कुछ अलग तरीकों को कवर किया, जिसमें rand , srand , Random और Rubystats . हमने संक्षेप में यह भी बताया कि 'यादृच्छिक' संख्याएँ कैसे बनाई जाती हैं और इस कारण पर ध्यान दिया कि नियतात्मक उपकरण वास्तविक यादृच्छिक संख्याएँ क्यों नहीं बना सकते हैं।

आपको ध्यान देना चाहिए कि कवर की गई विधियां उन सभी उपयोग मामलों के लिए आदर्श नहीं हैं जो यादृच्छिकता की मांग करते हैं। विधियों द्वारा उत्पन्न पूर्णांक या फ़्लोटिंग पॉइंट नंबर गेमिंग में मौका देने या सिमुलेशन बनाने के लिए आदर्श हो सकते हैं, लेकिन ऐसी परिस्थितियों में जो कुछ सुरक्षा के लिए कॉल करते हैं, उदाहरण के लिए पासवर्ड रीसेट टोकन उत्पन्न करते समय, आपको सिक्योररैंडम का उपयोग करने पर विचार करना चाहिए। SecureRandom . के साथ , आप हेक्साडेसिमल, बेस 64, बाइनरी और यूयूआईडी स्ट्रिंग्स जेनरेट कर सकते हैं जिन्हें प्लेन नंबरों की तुलना में क्रैक करना बहुत कठिन होता है।

हमें उम्मीद है कि आपको इनमें से कुछ दिलचस्प लगा होगा। यदि आपके पास हमारे द्वारा कवर की गई कोई टिप्पणी या प्रश्न हैं, तो कृपया हमसे @AppSignal पर संपर्क करें। आप हमें उन विषयों के लिए अपने अनुरोध भी भेज सकते हैं जिन्हें आप कवर करना चाहते हैं।

हमने SecureRandom पर एक नोट शामिल करने के लिए 1 अगस्त, 2018 को इस लेख को अपडेट किया है


  1. पायथन में यादृच्छिक संख्या

    स्पष्टीकरण यादृच्छिक संख्या उत्पन्न करने के लिए पायथन के कुछ कार्य हैं। उनका उपयोग बहुत सारे खेलों, लॉटरी आदि में किया जा सकता है जहाँ उत्पन्न करने के लिए यादृच्छिक संख्या की आवश्यकता होती है। कुछ फ़ंक्शन ऐसे हैं जो यादृच्छिक संख्याएँ उत्पन्न करते हैं - पसंद () इस फ़ंक्शन का उपयोग संख्याओं के संग

  1. भारित यादृच्छिक संख्याएँ कैसे उत्पन्न करें

    रैंडम नंबर आमतौर पर उसी का अनुसरण करते हैं जिसे हम यूनिफ़ॉर्म डिस्ट्रीब्यूशन कहते हैं, जिसका अर्थ है कि एक ही मौका है कि किसी भी नंबर को चुना जाए। लेकिन अगर आप चाहते हैं कि कुछ नंबर दूसरों की तुलना में अधिक बार चुने जाएं तो आपको एक अलग रणनीति की आवश्यकता होगी:एक भारित यादृच्छिक संख्या जनरेटर । कुछ

  1. रूबी में रैंडम नंबर और स्ट्रिंग्स कैसे जेनरेट करें?

    अगर आप रूबी में रैंडम नंबर और स्ट्रिंग जेनरेट करना सीखना चाहते हैं, तो आप सही जगह पर हैं। क्योंकि यह लेख इसी के बारे में है! एक यादृच्छिक संख्या के साथ आप एक यादृच्छिक तत्व चुन सकते हैं एक सरणी से, एक सूची से एक विजेता चुनें, पासा रोल बनाएं, आदि। रूबी में, विभिन्न गुणों के साथ यादृच्छिक संख्याएँ