توليد الرقم العشوائي المتسلسل الموزع في Ruby 1.9.2
-
01-10-2019 - |
سؤال
ال Random
يتم ضمان فئة في Ruby 1.9.2 لإنشاء أرقام عشوائية بنفس الترتيب ، بالنظر إلى بذرة ونطاق معينين. على سبيل المثال:
r = Random.new(23)
r.rand(100) # 83
r.rand(100) # 40
لكن افترض أنني أريد إنشاء الرقم التالي في التسلسل على جهاز كمبيوتر آخر (دون إعادة توليد الأرقام السابقة في التسلسل). يجب أن يكون هذا ممكنًا ، بالنظر إلى الإخراج السابق. هل هناك طريقة للقيام بذلك مع Random
صف دراسي؟ أو هل يجب أن أكتب تنفيذي الخاص Mersenne Twister?
[يحرر: كما هو موضح في التعليقات أدناه ، ليس من الممكن في الواقع تحديد حالة أ Random
مثيل فقط من الإخراج ، لأن جزءًا فقط من الحالة (على وجه التحديد ، يتم استخدام 32 بت منخفضة) للإخراج.
المحلول
لا يمكن اختبارها ، ولكن يمكن تنظيم المولد ، وفقًا لمارك أندريه لافورتون هنا. لذلك قد ينجح هذا:
r = Random.new(23)
r.rand(100) # 83
r.rand(100) # 40
File.open("/path/to/file","w") do |f|
Marshal.dump(r,f)
end
# later, may be on another computer
File.open("/path/to/file","r") do |f|
@v = Marshal.load(f)
end
puts @v.rand(100)
لا تنتمي إلى StackOverflow