خلاّط الأسطر والكلمات

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

1,162 مشاهدة

كيف تعمل الأداة

الصق قائمة (عنصر واحد في كل سطر) أو كتلة نص، واختر الخلط حسب السطر أو حسب الكلمة، وتُشغّل الأداة خوارزمية Fisher-Yates مزروعة بـcrypto.getRandomValues — مصدر العشوائية القوي تشفيرياً نفسه، بنفس تجنّب انحياز باقي القسمة، المستخدم في أدوات رمي النرد ومولّد الأرقام العشوائية واختيار الفائز بالسحب في هذا الموقع. تعمل Fisher-Yates من العنصر الأخير إلى الوراء: لكل موضع، تختار فهرساً عشوائياً من العناصر المتبقية وتبدّله في مكانه، بحيث يكون كل ترتيب ممكن للقائمة محتملاً بنفس الدرجة، دون انحياز لأي موضع.

تفصيل تجنّب الانحياز هذا أهم مما يبدو. الفهرس العشوائي الساذج المولَّد بـMath.random() * n، أو الأسوأ، عدد صحيح عشوائي تشفيرياً مُختزَل بـ% n، ليس منتظماً تماماً عندما لا يقسم n نطاق المولّد بالتساوي — تظهر بعض المواضع بتكرار أعلى بقليل من غيرها. عبر بضع عمليات خلط لن يلاحظ أحد ذلك؛ أما في منصة اختبارات تُجري آلاف عمليات الخلط يومياً، فإن انحيازاً طفيفاً في ترتيب الأسئلة أو ترتيب دخول السحب مشكلة إنصاف حقيقية. ترفض هذه الأداة القيم خارج النطاق وتعيد سحبها بدلاً من اختزالها بباقي القسمة، فيبقى كل خلط غير متحيز بصرف النظر عن طول القائمة.

هذا نفس مبدأ الخلط الذي يشغّل أداتَي رمي النرد والأرقام العشوائية في هذا الموقع، مطبَّقاً فقط على مصفوفة من الأسطر أو الكلمات بدلاً من رقم واحد: اختر بانتظام من بين العناصر المتبقية غير المخلوطة، ضعه في مكانه، وكرِّر حتى لا يتبقى شيء. هذا الضمان — أن كل تباديل الإدخال قابلة للوصول بنفس الدرجة — هو ما يفصل خلطاً بمستوى الإنصاف عن خلط يبدو مبعثراً فقط لكنه يحابي ترتيبات معينة بصمت.

ما ينبغي معرفته

  • وضع السطر يعامل كل سطر كوحدة واحدة للخلط — مثالي لعشوائية قائمة أسماء أو ترتيب قراءة أو مجموعة أسئلة اختبار.
  • وضع الكلمة يقسّم عند المسافات، يخلط الكلمات، ويعيد دمجها — جيد لخلط جملة واحدة أو عبارة قصيرة.
  • عشوائي حقاً، لا يبدو عشوائياً فقط: مصدر التشفير المستخدم هنا هو نفس فئة العشوائية المستخدمة للمفاتيح التشفيرية، وليس دالة العشوائية الافتراضية الأضعف المدمجة في معظم اللغات.
  • لا شيء يُخزَّن: يعمل الخلط بالكامل داخل متصفحك وينتج ترتيباً جديداً مستقلاً في كل نقرة — تحديث الصفحة يعطي نتيجة مختلفة، لا تكراراً.

الأسئلة الشائعة

هل الخلط عشوائي حقًا؟

نعم — يستخدم خوارزمية Fisher-Yates غير متحيزة مدعومة بـ crypto.getRandomValues وليس Math.random()، مع رفض السحوبات خارج النطاق بدلاً من اختزالها بباقي القسمة، بحيث يكون كل ترتيب محتملاً بنفس الدرجة بصرف النظر عن طول القائمة.

هل يمكنني خلط الكلمات داخل جملة واحدة؟

نعم — بدّل إلى وضع الكلمة؛ فيقسّم النص عند المسافات، يخلطه، ثم يعيد دمجه.

لماذا لا تُستخدم Math.random() فقط؟

Math.random() مولّد عشوائي زائف سريع مُصمَّم للرسوميات والحركة، لا للاختيار الحساس للإنصاف، واختزال ناتجه بسذاجة إلى نطاق باستخدام باقي القسمة يُدخل انحيازاً إحصائياً طفيفاً. أما crypto.getRandomValues فمصدر قوي تشفيرياً مُصمَّم تحديداً لهذا النوع من الاختيار العشوائي غير المتحيز.

ما المهام الواقعية التي تناسبها هذه الأداة؟

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

هل يعطي خلط القائمة نفسها مرتين الترتيب نفسه؟

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

التعليقات

لا توجد تعليقات بعد — كن أول من يكتب تعليقًا!

أدوات مشابهة