كيفية توليد أرقام عشوائية في روبي

click fraud protection

على الرغم من أنه لا يوجد كمبيوتر يمكنه إنشاء أرقام عشوائية حقًا ، فإن روبي يوفر الوصول إلى طريقة ستعود شبه عشوائي أعداد.

لا يوجد كمبيوتر يمكن أن تولد حقا أرقام عشوائية بحتة عن طريق حساب. أفضل ما يمكنهم فعله هو توليد شبه عشوائي الأرقام ، والتي هي سلسلة من الأرقام التي يظهر عشوائي ولكن ليست كذلك.

بالنسبة إلى مراقب بشري ، فإن هذه الأرقام عشوائية بالفعل. لن يكون هناك تسلسلات متكررة قصيرة ، وعلى الأقل للمراقب الإنساني ، لن يقدموا أي نمط واضح. ومع ذلك ، بالنظر إلى ما يكفي من الوقت والدافع ، الأصلي بذرة يمكن اكتشافه ، تسلسل صوغه والرقم التالي في التسلسل خمنت.

لهذا السبب ، ربما لا يجب استخدام الطرق التي تمت مناقشتها في هذه المقالة لإنشاء أرقام يجب أن تكون آمنة بشكل تشفير.

يجب أن يكون عدد المولدات العشوائية المزيفة المصنفة من أجل إنتاج تسلسلات تختلف في كل مرة يتم إنشاء رقم عشوائي جديد. لا توجد طريقة سحرية - يتم إنشاء هذه الأرقام العشوائية على ما يبدو باستخدام خوارزميات بسيطة نسبيًا وحساب بسيط نسبيًا. من خلال زرع بذور PRNG ، فأنت تبدأ تشغيله في وقت مختلف في كل مرة. إذا لم تقم بزرعها ، فسيولد نفس تسلسل الأرقام في كل مرة.

instagram viewer

في روبي ، و نواة # srand يمكن استدعاء الأسلوب مع عدم وجود الحجج. سوف تختار رقمًا أوليًا عشوائيًا بناءً على الوقت ومعرف العملية ورقم التسلسل. ببساطة عن طريق الاتصال srand في أي مكان في بداية البرنامج ، سيتم إنشاء سلسلة مختلفة من الأرقام العشوائية في كل مرة تقوم بتشغيله. يتم استدعاء هذه الطريقة ضمنيًا عند بدء تشغيل البرنامج ، وبذر PRNG بمعرف الوقت والمعالجة (بدون رقم تسلسل).

بمجرد تشغيل البرنامج و نواة # srand كان إما ضمنيًا أو صريحًا ، نواة # راند يمكن استدعاء الأسلوب. ستُرجع هذه الطريقة ، التي تسمى بدون وسيطات ، رقمًا عشوائيًا من 0 إلى 1. في الماضي ، تم تغيير هذا العدد عادةً إلى الحد الأقصى الذي ترغب في توليده وربما to_i دعا عليه لتحويله إلى عدد صحيح.

ومع ذلك ، فإن Ruby يجعل الأمور أسهل قليلاً إذا كنت تستخدم Ruby 1.9.x. ال نواة # راند طريقة يمكن أن تأخذ حجة واحدة. إذا كانت هذه الحجة هي رقمي من أي نوع ، سيقوم روبي بإنشاء عدد صحيح من 0 إلى (وليس بما في ذلك) هذا الرقم.

ومع ذلك ، ماذا لو كنت تريد إنشاء عدد من 10 إلى 15؟ عادة ، يمكنك إنشاء رقم من 0 إلى 5 وإضافته إلى 10. ومع ذلك ، روبي يجعل الأمر أسهل.

تأكد من الانتباه إلى هذين النوعين من النطاقات. إذا اتصلت راند (10..15)، من شأنه أن يولد عددا من 10 إلى 15 بما فيها 15. بينما راند (10... 15) (مع 3 نقاط) من شأنه أن يولد عددا من 10 إلى 15 لا يشمل 15.

في بعض الأحيان تحتاج إلى تسلسل عشوائي المظهر من الأرقام ، ولكن تحتاج إلى إنشاء نفس التسلسل في كل مرة. على سبيل المثال ، إذا قمت بإنشاء أرقام عشوائية في اختبار وحدة ، فيجب عليك إنشاء نفس تسلسل الأرقام في كل مرة.

يجب أن يفشل اختبار الوحدة الذي فشل في تسلسل واحد مرة أخرى في المرة التالية التي يتم فيها تشغيله ، إذا كان قد تم إنشاء تسلسل فرق في المرة التالية ، فقد لا ينجح. للقيام بذلك ، اتصل نواة # srand مع قيمة معروفة وثابتة.

تنفيذ نواة # راند هو بالأحرى روبي. إنها لا تجرِّد PRNG بأي شكل من الأشكال ، كما أنها لا تسمح لك باستنساخ PRNG. هناك حالة عمومية واحدة لـ PRNG تشترك فيها جميع الشفرات. إذا قمت بتغيير البذرة أو غيرت حالة PRNG بطريقة أخرى ، فقد يكون لها تأثير أوسع من المتوقع.

ومع ذلك ، نظرًا لأن البرامج تتوقع أن تكون نتيجة هذه الطريقة عشوائية - هذا هو الغرض منها! - ربما لن تكون هذه مشكلة. فقط إذا كان البرنامج يتوقع رؤية تسلسل متوقع من الأرقام ، مثل ما إذا كان قد تم الاتصال به srand مع قيمة ثابتة ، يجب أن نرى نتائج غير متوقعة.

instagram story viewer