কম্পিউটার টিউটোরিয়াল

রুবিতে র‍্যান্ডম নম্বর ও স্ট্রিং: প্র্যাকটিক্যাল গাইড

রুবিতে র‍্যান্ডম নম্বর ও স্ট্রিং জেনারেট করতে চান? তবে আপনি সঠিক জায়গায় আছেন।

কারণ এই আর্টিকেলটি ঠিক সেই বিষয়ে!

একটি র‍্যান্ডম নম্বর দিয়ে আপনি একটি অ্যারে থেকে র‍্যান্ডম এলিমেন্ট পিক করতে পারেন, একটি লিস্ট থেকে বিজয়ী বেছে নিতে পারেন, ডাইস রোল জেনারেট করতে পারেন, ইত্যাদি।

রুবিতে র‍্যান্ডম নম্বর জেনারেট করার অনেক পথ আছে ভিন্ন ভিন্ন প্রোপার্টির সাথে।

উদাহরণস্বরূপ…

rand মেথড ৩ভাবে ব্যবহার করা যায়:

  • আর্গুমেন্ট ছাড়া, rand আপনাকে একটি ফ্লোটিং পয়েন্ট নম্বর দেবে ০ এবং ১-এর মধ্যে (যেমন 0.4836732493)
  • ইন্টিজার আর্গুমেন্ট দিলে (rand(10)) ০ এবং সেই নম্বরের মধ্যে একটি নতুন ইন্টিজার मिलবে
  • রেঞ্জ আর্গুমেন্ট দিলে (rand(1..20)) রেঞ্জের শুরু থেকে শেষ পর্যন্ত একটি ইন্টিজার মিলবে

রুবিতে র‍্যান্ডমনেস জেনারেট করার অন্যান্য পদ্ধতিগুলো:

  • Array#shuffle মেথড
  • Array#sample মেথড
  • SecureRandom ক্লাস

চলুন কিছু উদাহরণ দেখি!

র‍্যান্ডম নম্বর জেনারেট করা

রুবি র‍্যান্ডম নম্বর জেনারেট করতে rand মেথড ব্যবহার করতে পারেন:

রুবিতে র‍্যান্ডম নম্বর ও স্ট্রিং: প্র্যাকটিক্যাল গাইড

আর্গুমেন্ট ছাড়া কল করলে rand ফ্লোটিং পয়েন্ট নম্বর প্রোডিউস করে (0.4836732493)।

আপনি rand-এ আর্গুমেন্ট পাস করে ০ থেকে শুরু করে সেই নম্বর পর্যন্ত (তবে সেটি অন্তর্ভুক্ত নয়) একটি নম্বর জেনারেট করতে পারেন।

rand 100
> 41

রুবি র‍্যান্ডম নম্বর জেনারেশন খুব সহজ, কিন্তু যদি নির্দিষ্ট রেঞ্জে নম্বর দরকার হয় ০ থেকে শুরু না করে?

সমস্যা নেই! রেঞ্জ ব্যবহার করে আপনি কাঙ্খিত ফলাফল পেতে পারেন।

উদাহরণ:

rand 200..500
> 352

সিকিউর রুবি র‍্যান্ডম নম্বর

rand দিয়ে প্রোডিউস হওয়া নম্বরগুলো সিম্পল অ্যাপ্লিকেশনের জন্য যথেষ্ট হতে পারে…

…কিন্তু সিকিউরিটি উদ্দেশ্যে ব্যবহার করতে চাইলে —যেমন পাসওয়ার্ড রিসেট টোকেন জেনারেট করতে— তবে SecureRandom ব্যবহার করুন, যা রুবি স্ট্যান্ডার্ড লাইব্রেরির অংশ।

Unix সিস্টেমে SecureRandom তার জেনারেটরকে /dev/urandom- থেকে সিড করে এবং উইন্ডোজে CryptAcquireContext / CryptGenRandom API ব্যবহার করে।

একটি উদাহরণ:

require 'securerandom'
SecureRandom.random_number
> 0.232

দেখুন এটি অনেকটাই rand-এর মতো কাজ করে, আপনি একসাথে ম্যাক্স নম্বরও পাস করতে পারেন।

উদাহরণ:

SecureRandom.random_number(100)
> 72

SecureRandom-এর অন্যান্য আউটপুট ফরম্যাটও আছে।

hex ব্যবহার করে হেক্সাডেসিমাল ফিক্সড-উইডথ স্ট্রিং জেনারেট করা যায়।

SecureRandom.hex
> "87694e9e5231abca6de39c58cdfbe307"

রুবি ২.৫-এ একটি নতুন মেথড যোগ হয়েছে, যা র‍্যান্ডম অ্যালফানিউমেরিক স্ট্রিং প্রোডিউস করে:

SecureRandom.alphanumeric
> "PSNVXOeDpnFikJPC"

অ্যারে থেকে র‍্যান্ডম এলিমেন্ট পিক করা

এখন: আপনি একটি লিস্ট থেকে র‍্যান্ডম পিক নিতে চান।

আপনি এটি ট্রাই করতে পারেন:

[5, 15, 30, 60].shuffle.first
> 30

কিন্তু রুবিতে sample মেথড আছে যা এই কাজের জন্য আরও উপযুক্ত (এবং ফাস্ট):

[5, 15, 30, 60].sample
> 5

sample রেঞ্জের জন্যও ব্যবহার করা যায়, এই কোড একটি র‍্যান্ডম অক্ষর জেনারেট করে:

('a'..'z').to_a.sample
> b

ইন্টিজার আর্গুমেন্ট পাস করে sample-এ N টি ইউনিক এলিমেন্ট পাওয়া যায় অ্যারেতে থেকে:

[1,2,3].sample(2)
> [1, 2]

কাস্টম র‍্যান্ডম জেনারেটরও আর্গুমেন্ট হিসেবে পাস করা যায়:

[1,2,3].sample(random: SecureRandom)

রুবি র‍্যান্ডম স্ট্রিং

র‍্যান্ডমনেসের চরম অ্যাপ্লিকেশন হলো কাস্টম ক্যারেক্টার সেট দিয়ে র‍্যান্ডম স্ট্রিং জেনারেট করা। কোডটি নিচে:

def generate_code(number)
  charset = Array('A'..'Z') + Array('a'..'z')
  Array.new(number) { charset.sample }.join
end
puts generate_code(20)

এখানে কিছু ঘটছে। প্রথমে, রেঞ্জ ব্যবহার করে charset তৈরি করা হয়েছে এবং সেগুলো অ্যারে-এ কনভার্ট করা হয়েছে। তারপর Array.new ব্লক সহ কল করে সাইজ n-এর একটি অ্যারে ইনিশিয়ালাইজ করা হয়েছে ব্লক দ্বারা প্রোডিউস করা ভ্যালু দিয়ে।

এই কোড নিচের ফরম্যাটের স্ট্রিং প্রোডিউস করবে: TufwGfXZskHlPcYrLNKg।

আপনি ক্যারেক্টার সেট আপনার প্রয়োজনমতো টিউন করতে পারেন।

র‍্যান্ডম নম্বর জেনারেটর সিড করা

যদি আপনি rand মত মেথড ব্যবহার করে জেনারেট হওয়া নম্বর কন্ট্রোল করতে চান, তবে সিড সেট করতে পারেন।

সিড কী?

সিড হলো একটি নম্বর যা র‍্যান্ডম নম্বর সিকোয়েন্স শুরু করে। সকল জেনারেট হওয়া নম্বর এই সিড থেকে উদ্ভূত হয়।

সিডের গুণগত মানই সাধারণত ভালো র‍্যান্ডম সিকোয়েন্স প্রোডিউস করার কী। রুবি ইতোমধ্যে এর যত্ন নেয় (অতিরিক্ত সিকিউরিটির জন্য SecureRandom ব্যবহার করুন), কিন্তু কিছু সিনেরিওতে (প্রায়শই টেস্টিং ও ডিবাগিং) আপনি নিজে সিড সেট করতে চাইতে পারেন।

এটি srand মেথড দিয়ে করা যায়।

যেমন:

Kernel.srand(1)

এই সিড দিয়ে আপনি জেনারেটর কী নম্বর দেবে সেটি আগে থেকে জানতে পারবেন।

নম্বর ১ সিড হিসেবে দিলে:

Array.new(5) { rand(1..10) } # [6, 9, 10, 6, 1]

আপনি আবার সিড ১ সেট করলে, সিকোয়েন্স ৬ থেকে শুরু হবে, তারপর ৯, ১০, ইত্যাদি।

উপসংহার

এটাই ছিলো! আপনি এখন আপনার রুবি প্রোগ্রামগুলিতে র‍্যান্ডমনেস ব্যবহার করার জন্য প্রস্তুত 🙂

পোস্টটি উপকারী লাগলে? বন্ধুদের সাথে শেয়ার করুন এবং নিউজলেটার সাবস্ক্রাইব করুন যেন নতুন কন্টেন্ট মিস না হয়!

  1. Python-এ আর্মস্ট্রং নম্বর জেনারেট করা

  2. পাইথন কীভাবে র‍্যান্ডম সংখ্যা জেনারেট করে

  3. ওয়েটেড র‍্যান্ডম নাম্বার জেনারেশন মাস্টার করুন: টেকনিক এবং অ্যাপ্লিকেশন

  4. রুবিতে র‍্যান্ডম নম্বর জেনারেশন শিখুন: টেকনিক এবং বেস্ট প্র্যাকটিস