উত্তর:
ব্যবহার rand(range)
থেকে রুবি র্যান্ডম সংখ্যা :
আপনি যদি একটি ছয় একতরফা ডাই একটি রোল অনুকরণ একটি র্যান্ডম পূর্ণসংখ্যা প্রয়োজন থাকে, তাহলে আপনি ব্যবহার করতে চাই:
1 + rand(6)। ক্রেপস মধ্যে একটি রোল সঙ্গে অনুকরণ করা যেতে পারে2 + rand(6) + rand(6)।শেষ অবধি, আপনার যদি কেবল একটি এলোমেলো ফ্লোটের প্রয়োজন হয়, কেবল
randকোনও যুক্তি ছাড়াই কল করুন ।
মার্ক-আন্দ্রে লাফোর্টুন যেমন নীচে তার উত্তরে উল্লেখ করেছেন (এটি উপরে যান) , রুবির ১.৯.২ এর নিজস্ব Randomশ্রেণি রয়েছে (যে মার্কটি -আন্দ্রে নিজেই ডিবাগ করতে সহায়তা করেছিলেন , সুতরাং সেই বৈশিষ্ট্যের জন্য ১.৯.২ লক্ষ্য )।
উদাহরণস্বরূপ, এই গেমটিতে যেখানে আপনার 10 নম্বর অনুমান করা দরকার , আপনি সেগুলি দিয়ে আরম্ভ করতে পারেন:
10.times.map{ 20 + Random.rand(11) }
#=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]
বিঃদ্রঃ:
ব্যবহার Random.new.rand(20..30)(ব্যবহার Random.new) সাধারণত একটি ভাল ধারণা হবে না, যেমন দ্বারা বিস্তারিতভাবে ব্যাখ্যা (আবার) মার্ক-Andre Lafortune মধ্যে তার উত্তর (আবার)।
তবে যদি আপনি এটি ব্যবহার না করেন Random.newতবে শ্রেণি পদ্ধতিটিrand কেবল একটি maxমান নেয়, একটি নয় Range, যেমন ব্যানস্টার (শক্তি দিয়ে) মন্তব্যে উল্লেখ করে (এবং ডক্সেRandom ডকুমেন্ট হিসাবে )। The সংখ্যার সাথে একটি এলোমেলো সংখ্যা উত্পন্ন করে উদাহরণ হিসাবে কেবল উদাহরণ পদ্ধতিটি গ্রহণ করতে পারে ।Range
এই কেন এর সমতূল্য Random.new.rand(20..30)হবে 20 + Random.rand(11)সাল থেকে Random.rand(int)আয় "চেয়ে একটি র্যান্ডম পূর্ণসংখ্যা শূন্যের চেয়ে বড় বা এবং সমান যুক্তি কম ।" 20..30৩০ টি অন্তর্ভুক্ত রয়েছে, আমাকে ১১ টি বাদ দিয়ে 0 এবং 11 এর মধ্যে একটি এলোমেলো সংখ্যা নিয়ে আসতে হবে।
Randomক্লাসের উল্লেখ করার জন্য আপনি নিজের উত্তরটি সম্পাদনা করেছেন এটি দুর্দান্ত , তবে Random.newআপনার উদাহরণের মতো একাধিকবার কল করা ভয়ানক ধারণা । আমি আমার উত্তরটি সম্পাদন করেছি যে তা জানাতে।
Random.rand আসলে একটি পরিসীমা গ্রহণ করে না। (১.৯.৩ থেকে, আমি বিশ্বাস করি))
আপনি যখন এবং (যেখানে 10 অন্তর্ভুক্ত এবং 42 একচেটিয়া) এর rand(42-10) + 10মধ্যে একটি এলোমেলো নম্বর পেতে ব্যবহার করতে পারেন তবে রুবি ১.৯.৩ এর থেকে আরও ভাল উপায় আছে যেখানে আপনি কল করতে পারবেন:1042
rand(10...42) # => 13
আমার backportsরত্নটি প্রয়োজনীয় করে রুবির সমস্ত সংস্করণের জন্য উপলব্ধ ।
রুবি ১.৯.২ ক্লাসটিও চালু করেছিল Randomযাতে আপনি নিজের র্যান্ডম সংখ্যার জেনারেটর অবজেক্ট তৈরি করতে পারেন এবং একটি দুর্দান্ত এপিআই পাবেন:
r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"
Randomশ্রেণী খোদ একটি র্যান্ডম জেনারেটর হিসাবে কাজ করে যাতে আপনি সরাসরি কল:
Random.rand(10...42) # => same as rand(10...42)
নোট চালু আছে Random.new
বেশিরভাগ ক্ষেত্রে, সবচেয়ে সহজ ব্যবহার randবা হয় Random.rand। আপনি যখন এলোমেলো নম্বর চান প্রতিবার একটি নতুন এলোমেলো জেনারেটর তৈরি করা সত্যিই খারাপ ধারণা । আপনি যদি এটি করেন, আপনি এলোমেলো প্রাথমিক বীজ অ্যালগরিদমের এলোমেলো বৈশিষ্ট্য যা এলোমেলো জেনারেটরের নিজস্ব বৈশিষ্ট্যের তুলনায় নৃশংস হয় ।
আপনি যদি ব্যবহার করেন তবে আপনার Random.newএটিকে খুব কমই কল করা উচিত , উদাহরণস্বরূপ একবার হিসাবে MyApp::Random = Random.newএবং এটি অন্য কোথাও ব্যবহার করুন।
Random.newযেগুলি ক্ষেত্রে সহায়ক সেগুলি নিম্নলিখিত:
rand/ তার ক্রমটিতে বাধা দিতে চায় নাRandom.randRandomবস্তুগুলি মার্শাল করতে পারে এমন সহজ )backportsরত্নটি কেবলমাত্র পদ্ধতিগুলির একটি সংকলন যা রুবিতে 1.8.7, 1.9.1, 1.9.2 এ নতুন, তবে এটি রুবিতে প্রয়োগ করা হয়েছে। ফলাফলগুলি রুবির সাথে সামঞ্জস্যপূর্ণ কিনা তা নিশ্চিত করার জন্য আমি রুবিস্পেক ব্যবহার করি।
Random.rand(10..42)কাজ করে না. Random.randবর্গ পদ্ধতি একটি সীমার গ্রহণ করে না। (রুবি 1.9.2p180)
আপনি যদি কেবল একটি সংখ্যার সন্ধানই করেন না তবে হেক্স বা ইউইউডিও এটি উল্লেখযোগ্য যে SecureRandomমডিউলটি ActiveSupport1.9.2+ এ রুবি কোর থেকে তার পথ খুঁজে পেয়েছিল। সুতরাং একটি পূর্ণ প্রস্ফুটিত কাঠামোর প্রয়োজন ছাড়াই:
require 'securerandom'
p SecureRandom.random_number(100) #=> 15
p SecureRandom.random_number(100) #=> 88
p SecureRandom.random_number #=> 0.596506046187744
p SecureRandom.random_number #=> 0.350621695741409
p SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
এটি এখানে নথিভুক্ত করা হয়েছে: রুবি ১.৯.৩ - মডিউল: সিকিউরআরডম (lib / secrarandom.rb)
SecureRandom.random_number(1000..9999)
SecureRandom.random_number()একটি পরিসীমা লাগে না, তাই না। আপনি সম্ভবত SecureRandom.random_number(10_000)(0-9999 এর জন্য) বা SecureRandom.random_number(9_000)+1_000(1000-9999 এর জন্য) চাইবেন।
আপনি randপদ্ধতিটি দিয়ে একটি এলোমেলো সংখ্যা তৈরি করতে পারেন । randপদ্ধতিতে পাস হওয়া আর্গুমেন্টটি একটি integerবা একটি হওয়া উচিত rangeএবং ব্যাপ্তির মধ্যে একটি সম্পর্কিত এলোমেলো নম্বর প্রদান করে:
rand(9) # this generates a number between 0 to 8
rand(0 .. 9) # this generates a number between 0 to 9
rand(1 .. 50) # this generates a number between 1 to 50
#rand(m .. n) # m is the start of the number range, n is the end of number range
rand(1..6)শীর্ষ উত্তর এর চেয়ে পরিষ্কার লেখা আছে rand(6)+1।
ঠিক আছে, আমি এটি বের করেছিলাম। স্পষ্টতই একটি বিল্টিন (?) ফাংশন রয়েছে যা র্যান্ড নামে পরিচিত:
rand(n + 1)
যদি কেউ আরও বিস্তারিত উত্তর দিয়ে উত্তর দেয় তবে আমি এটিকে সঠিক উত্তর হিসাবে চিহ্নিত করব।
প্রশ্নের সহজ উত্তর:
rand(0..n)
আপনি সহজভাবে ব্যবহার করতে পারেন random_number।
যদি ধনাত্মক পূর্ণসংখ্যা n হিসাবে দেওয়া হয় তবে random_numberপূর্ণসংখ্যা ফেরত দেয়: 0 <= random_number<n।
এটি এর মতো ব্যবহার করুন:
any_number = SecureRandom.random_number(100)
আউটপুট 0 এবং 100 এর মধ্যে যে কোনও সংখ্যা হবে।
rand(6) #=> gives a random number between 0 and 6 inclusively
rand(1..6) #=> gives a random number between 1 and 6 inclusively
নোট করুন যে পরিসীমা বিকল্পটি রুবিয়ের আরও নতুন (1.9+ আমি বিশ্বাস করি) সংস্করণগুলিতে উপলভ্য।
ruby 1.9.3+। 1.9.2আমি অন্তত চেষ্টা করার সময় এটি কাজ করে না ।
পরিসর = 10..50
RAND (রেঞ্জ)
অথবা
range.to_a.sample
অথবা
range.to_a.shuffle (এটি পুরো অ্যারে বদলে যাবে এবং আপনি এ্যান্ড থেকে প্রথম বা শেষ বা কোনও এলোমেলোভাবে কোনও এলোমেলোভাবে চয়ন করতে পারবেন)
range.to_a.sampleনমুনা বড় হলে একটি ভয়ঙ্কর ধারণা।
আপনি র্যান্ড (পরিসীমা) করতে পারেন
x = rand(1..5)
এই লিঙ্কটি এটি সম্পর্কিত সহায়ক হতে চলেছে;
http://ruby-doc.org/core-1.9.3/Random.html
রুবিতে এলোমেলো সংখ্যার চেয়ে নীচে আরও কিছু স্পষ্টতা;
0 থেকে 10 পর্যন্ত পূর্ণসংখ্যা তৈরি করুন
puts (rand() * 10).to_i
আরও পঠনযোগ্য উপায়ে 0 থেকে 10 পর্যন্ত একটি সংখ্যা তৈরি করুন
puts rand(10)
15 সহ 10 থেকে 15 পর্যন্ত একটি সংখ্যা তৈরি করুন
puts rand(10..15)
নন-এলোমেলো র্যান্ডম নাম্বার
প্রোগ্রামটি চালানোর সময় সংখ্যার একই ক্রম তৈরি করুন
srand(5)
১০ টি এলোমেলো সংখ্যা তৈরি করুন
puts (0..10).map{rand(0..10)}
হতে পারে এটি আপনাকে সাহায্য করবে। আমি আমার অ্যাপে এটি ব্যবহার করি use
https://github.com/rubyworks/facets
class String
# Create a random String of given length, using given character set
#
# Character set is an Array which can contain Ranges, Arrays, Characters
#
# Examples
#
# String.random
# => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3"
#
# String.random(10)
# => "t8BIna341S"
#
# String.random(10, ['a'..'z'])
# => "nstpvixfri"
#
# String.random(10, ['0'..'9'] )
# => "0982541042"
#
# String.random(10, ['0'..'9','A'..'F'] )
# => "3EBF48AD3D"
#
# BASE64_CHAR_SET = ["A".."Z", "a".."z", "0".."9", '_', '-']
# String.random(10, BASE64_CHAR_SET)
# => "xM_1t3qcNn"
#
# SPECIAL_CHARS = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "|", "/", "?", ".", ",", ";", ":", "~", "`", "[", "]", "{", "}", "<", ">"]
# BASE91_CHAR_SET = ["A".."Z", "a".."z", "0".."9", SPECIAL_CHARS]
# String.random(10, BASE91_CHAR_SET)
# => "S(Z]z,J{v;"
#
# CREDIT: Tilo Sloboda
#
# SEE: https://gist.github.com/tilo/3ee8d94871d30416feba
#
# TODO: Move to random.rb in standard library?
def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"])
chars = character_set.map{|x| x.is_a?(Range) ? x.to_a : x }.flatten
Array.new(len){ chars.sample }.join
end
end
এটি আমার জন্য দারুণ কাজ করছে
এটা কেমন?
num = Random.new
num.rand(1..n)
array#shuffleএলোমেলোকরণের জন্য পদ্ধতি চেষ্টা করুন
array = (1..10).to_a
array.shuffle.first
.shuffle.firstসাথে প্রতিস্থাপন করুন .sample!
প্রথমে Srand () দিয়ে আরএনজি বীজ করতে ভুলবেন না ।
srand <some_number>লেখার আগে ব্যবহার করাrandআপনাকে একটি ডিস্ট্রিমেন্টিক (অর্থাত্ পুনরাবৃত্তযোগ্য) সিউডো-এলোমেলো ক্রম দেয়, যদি আপনার এটির প্রয়োজন হয়। রুবি