هل عجلتنا عشوائية حقاً؟
يُسحب الفائز بمولّد عشوائي مشفّر قبل أن تتحرك العجلة. إليك الطريقة كاملة، وأدوات تتحقق بها بنفسك.
الجواب المختصر: هل عجلة الحظ مزورة؟
لا. عجلة الحظ في LuckyWheel لا تحتوي على أي خيار خفي لتوجيه النتيجة، لا عند المنظِّم ولا عندنا. يُختار الفائز داخل متصفحك بمولّد أرقام عشوائية مشفّر، من النوع المستعمل في توليد مفاتيح التشفير، قبل أن تبدأ العجلة في الدوران. والحركة التي تراها بعد ذلك مجرد عرض للنتيجة.
ولكل خيار فرصة تساوي حجم خانته بالضبط، وأي وزن مختلف يظهر بالنسبة المئوية أمام الجميع. في هذه الصفحة نشرح الطريقة خطوة بخطوة، ونفسّر لماذا يخرج الاسم نفسه مرتين، ثم نضع بين يديك حاسبة ومحاكياً لتتحقق بنفسك بدل أن تكتفي بكلامنا.
كيف يُختار الفائز؟ ثلاث مراحل بالترتيب
تمر كل دورة بثلاث مراحل، ولا تستطيع أي مرحلة أن تغيّر ما حسمته التي قبلها:
- السحب المشفّر: عند الضغط على «أدِر»، يطلب البرنامج أرقاماً عشوائية من المتصفح عبر
crypto.getRandomValues، ويختار الفائز من بين الخيارات المؤهلة حسب أوزانها. هنا تُحسم النتيجة نهائياً. - تحديد زاوية التوقف: يختار البرنامج نقطة عشوائية داخل خانة الفائز، بعيدة عن حافتيها بهامش يساوي 15% من عرضها (3 درجات على الأكثر)، حتى لا يتوقف المؤشر على خط فاصل، ثم يضيف عدداً من اللفات الكاملة.
- الحركة: تدور العجلة وتتباطأ حتى تستقر على تلك الزاوية بالضبط، فيكون الخيار الذي تحت المؤشر هو دائماً الفائز الذي سُحب في المرحلة الأولى.
لهذا لا تؤثر سرعة إصبعك حين تدير العجلة باللمس إلا في مدة الدوران وعدد اللفات. وزر «توقّف» في وضع الإيقاف اليدوي يختصر الحركة نحو الزاوية نفسها دون أن يغيّر الفائز. وإذا كان JavaScript معطَّلاً، يسحب الخادم الفائز بالأوزان نفسها عبر الدالة random_int في PHP، وهي أيضاً مولّد آمن تشفيرياً.
لماذا يخرج الاسم نفسه مرتين؟
«خرج اسم سلمى مرتين في خمس دورات، العجلة مزورة!» ملاحظة شائعة، لكن التكرار هو المتوقع وليس الاستثناء. فالعجلة لا تتذكر الدورات السابقة، وفي كل دورة يملك كل خيار الفرصة نفسها، سواء فاز قبل قليل أم لا.
لحساب احتمال تكرار اسم واحد على الأقل، نطرح من 1 احتمالَ أن تكون كل النتائج مختلفة. إذا كان عدد الخيارات n وعدد الدورات k، فالمعادلة هي:P = 1 − n! / ((n−k)! × n^k)
ومع 10 خيارات و5 دورات فقط، يكون احتمال أن تختلف النتائج الخمس كلها:(10×9×8×7×6) / 10^5 = 0.3024
فيبلغ احتمال التكرار 69.8%، أي أكثر من ثلثي الحالات.
إنها «مفارقة عيد الميلاد» المعروفة: في مجموعة من 23 شخصاً فقط، تبلغ فرصة أن يتشارك اثنان منهم يوم الميلاد نفسه 50.7%. وفي قسم من 30 تلميذاً، يصبح تكرار اسم أرجح من عدمه ابتداءً من الدورة السابعة.
| الخيارات | الدورات | احتمال التكرار |
|---|---|---|
| 10 | 3 | 28.0% |
| 10 | 5 | 69.8% |
| 30 | 7 | 53.1% |
| 30 | 10 | 81.5% |
جرّب أرقامك في الحاسبة أدناه. وإذا أردت ألا يتكرر أحد، فالحل هو وضع الإقصاء: يخرج الفائز من العجلة حتى يأتي دور الجميع. وهو مفعّل مسبقاً في عجلة الأسماء المخصّصة للقسم.
المحاكي: أطلق 100,000 دورة بنفسك
الكلام وحده لا يكفي، لذلك وضعنا هنا محاكياً يستعمل وحدة السحب نفسها التي تستعملها العجلة، ويعمل في الخلفية داخل متصفحك (Web Worker) دون إرسال أي شيء إلى خوادمنا. اختر عدداً من الخيارات المتساوية بين 2 و100، أو «عجلتي الحالية» بأوزانها، ثم عدد الدورات: 10,000 أو 100,000 أو 1,000,000. ستحصل على:
- مخطط بالأعمدة يقارن عدد مرات فوز كل خيار بالعدد المتوقع.
- أكبر انحراف بالنسبة المئوية عن القيمة المتوقعة.
- اختبار كاي مربع (χ²) وقيمة p، لمعرفة هل الفروق طبيعية أم مريبة.
- مدة الحساب على جهازك.
مع 10 خيارات متساوية و100,000 دورة، ينال كل خيار نحو 10,000 فوز، وتبقى نسبته في الغالب بين 9.8% و10.2%: هذه الفروق الصغيرة هي بصمة الصدفة الحقيقية. وإذا كان المولّد عادلاً، تكون قيمة p أكبر من 0.01 في 99 تجربة من كل 100 في المتوسط، فلا تعني قيمة صغيرة ظهرت مرة واحدة أن هناك خللاً: أعد التجربة وسترى.
الأوزان والاحتمالات المخصّصة: ظاهرة دائماً
أحياناً تريد عمداً أن تمنح خياراً فرصة أكبر: مشارك اشترى تذكرتين، أو جائزة كبرى نادرة في عجلة الجوائز. اكتب بعد الخيار مسافة ثم *3، فتصبح فرصته ثلاثة أضعاف فرصة خيار وزنه 1.
لكن الأوزان لا تُخفى أبداً: زاوية كل خانة تتناسب مع وزنها، فما تراه هو الاحتمال الحقيقي، وثلاثة خيارات بأوزان 1 و2 و3 تحصل على 16.7% و33.3% و50%. وعندما تختلف الأوزان، تظهر النسبة المئوية لكل خيار مع شارة «احتمالات مخصّصة» يراها الجميع، وتنتقل الأوزان كما هي مع رابط المشاركة. وفي القرعة الإلكترونية، تذكر شهادة السحب إن كانت الأوزان متساوية أو مخصّصة.
ما لن نفعله أبداً
- لا «فائز محدَّد مسبقاً»: لا زر خفي ولا اختصار سري ولا رابط خاص يفرض نتيجة، ولن نضيف ذلك مهما طُلب منا.
- لا أوزان خفية: كل وزن مختلف يظهر بالنسبة المئوية، وحجم الخانة يطابق احتمالها دائماً.
- لا سحب على خوادمنا: يجري السحب كاملاً في متصفحك، ولا تُرسل قوائمك ولا نتائجك إلينا.
- لا Math.random في السحب: هذه الدالة غير مصممة للأمان، فلا نستعملها إلا في المؤثرات الزخرفية مثل تناثر القصاصات الملونة.
- لا وعود مبالغ فيها: بصمة SHA-256 في شهادة السحب تثبت أن قائمة المشاركين لم تتغير بعد نشر الشهادة، لكنها لا تثبت أن السحب جرى بعد تثبيت القائمة. أما السحب القابل للتحقق، الذي يثبت ذلك، فما زال قيد التطوير.
هذه الالتزامات جزء من تعهداتنا العلنية المنشورة في صفحة من نحن.
شيفرة السحب خطوة بخطوة
للتلميذ الذي يطلب «رؤية الشيفرة»: كل ما سبق مكتوب في ملف صغير اسمه rng.js، يحمّله متصفحك مع الصفحة ويستطيع أي شخص قراءته من أدوات المطوّر. وهذا ما يفعله:
- يملأ مخزناً من 256 عدداً عشوائياً بطول 32 بت عبر
crypto.getRandomValues، ويجدّده كلما نفد. - لسحب عدد صحيح أصغر من n، يحسب حداً هو أكبر مضاعف لـ n لا يتجاوز 2 أس 32:
2^32 − (2^32 mod n)
ويرفض كل عدد يساوي هذا الحد أو يتجاوزه ويسحب غيره، ثم يأخذ باقي القسمة على n. هذه الطريقة، «أخذ العينات بالرفض»، تلغي الانحياز الذي يسببه باقي القسمة وحده. - يضرب كل وزن في 100 ويقرّبه إلى عدد صحيح، فتصبح الأوزان «تذاكر»، ثم يسحب رقم تذكرة بين 0 ومجموعها.
- يجد صاحب التذكرة بالبحث الثنائي، فيبقى السحب فورياً حتى مع 5000 خيار.
- يحسب زاوية التوقف داخل خانة الفائز بعدد عشري عشوائي دقته 53 بت، مع الهامش المذكور، ثم يضيف اللفات الكاملة.
ويستعمل الخلط في أداة تقسيم الفرق الدالة نفسها مع خوارزمية «فيشر-ييتس»، فلكل ترتيب الفرصة نفسها. وفي لعبة ملك أو كتابة يُسحب الوجه أيضاً قبل أن تبدأ القطعة النقدية بالدوران.
أسئلة شائعة
هل يمكن تزوير عجلة حظ أونلاين؟
تقنياً نعم: يستطيع أي موقع أن يبرمج عجلة تفرض نتيجة أو تخفي أوزاناً، ولذلك فسؤالك في محله. أما عجلتنا فلا تحتوي على أي خيار من هذا النوع: يُسحب الفائز بمولّد مشفّر داخل متصفحك، وكل وزن مختلف يظهر بالنسبة المئوية، وشيفرة السحب مقروءة لمن يريد فحصها، والمحاكي في هذه الصفحة يتيح لك اختبارها بنفسك.
لماذا يتكرر الاسم نفسه كثيراً؟
لأن العجلة لا تتذكر ما سبق: في كل دورة يملك كل اسم الفرصة نفسها، حتى لو فاز للتو. مع 10 أسماء، يعود الفائز السابق في الدورة التالية بنسبة 10%، ويبلغ احتمال تكرار اسم واحد على الأقل خلال 5 دورات 69.8%. وإذا أردت ألا يتكرر أحد قبل أن يأتي دور الجميع، ففعّل وضع الإقصاء.
هل تؤثر سرعة تدوير العجلة أو لحظة الضغط في النتيجة؟
لا. يُسحب الفائز لحظة الضغط على «أدِر»، قبل أي حركة، ولا يدخل في الحساب سوى المولّد العشوائي والأوزان. سرعة إصبعك حين تدير العجلة باللمس تغيّر مدة الدوران وعدد اللفات فقط، وزر «توقّف» في وضع الإيقاف اليدوي يختصر الحركة نحو الزاوية نفسها. فلا توجد حركة سحرية ولا توقيت أفضل من غيره.
كيف أثبت نزاهة السحب للمشاركين؟
أعلن القائمة والقواعد قبل السحب، ثم اسحب أمام الجميع أو في بث مباشر بوضع ملء الشاشة. بعد ذلك انشر شهادة القرعة الإلكترونية، وفيها التاريخ والساعة والفائزون وبصمة SHA-256 للقائمة، مع ملف TXT يتيح لأي مشارك إعادة حسابها. ولمسابقات التعليقات، تعرض قرعة انستقرام سبب استبعاد كل مشاركة.
هل تستعملون Math.random؟
لا، ليس في أي شيء يخص السحب أو الخلط. الدالة Math.random مناسبة للمؤثرات البصرية، لكن المتصفحات لا تضمن جودتها لأغراض الأمان، ويمكن نظرياً توقّع نتائجها. نستعمل بدلاً منها crypto.getRandomValues مع أخذ العينات بالرفض، ولا تظهر Math.random في شيفرتنا إلا لتوزيع القصاصات الملونة في احتفال الفائز.
هل يستطيع منظّم المسابقة أن يغش باستعمال عجلتكم؟
يستطيع المنظّم دائماً أن يعدّل قائمته قبل السحب، كأن يكرر اسماً أو يرفع وزنه، ولهذا جعلنا كل ذلك ظاهراً: الأوزان المختلفة تُعرض بالنسب المئوية مع شارة «احتمالات مخصّصة»، والشهادة تذكر نوع الأوزان. وبصفتك مشاركاً، اطلب رؤية القائمة الكاملة قبل السحب، وتأكد من غياب تلك الشارة.
آخر تحديث في بواسطة فريق LuckyWheel