آیا نیاز دارید برنده یک قرعهکشی را مشخص کنید، از یک دانشآموز درس بپرسید یا تصمیم بگیرید چه کسی نان بخرد؟ این ابزار آنلاین و رایگان، از هر فهرستی که وارد کنید یک انتخاب تصادفی عادلانه انجام میدهد. نامها یا گزینههای خود را در کادر «موارد» وارد کنید — هر کدام در یک خط جدید یا با کاما جدا شده — مشخص کنید چند نتیجه میخواهید را در بخش «تعداد» تنظیم کنید و روی دکمه «تولید» کلیک کنید. فهرست شما به حداقل دو مورد نیاز دارد و میتواند تا ۱۰۰۰ ورودی را در خود جای دهد، که طول هر کدام حداکثر ۲۰۰ نویسه (کاراکتر) است.
هر قرعهکشی مستقیماً در مرورگر شما با استفاده از Web Crypto API (crypto.getRandomValues) انجام میشود، که مقادیر تصادفی و از نظر رمزنگاری قدرتمندی را از سیستمعامل شما دریافت میکند. فهرست شما هرگز به هیچ سروری ارسال نمیشود، ثبت نمیگردد و ما هرگز آن را نمیبینیم — این موضوع در اینجا اهمیت بیشتری نسبت به سایر ابزارها دارد، زیرا معمولاً کاربران اطلاعاتی مانند فهرست مشتریان، دفتر حضور و غیاب کلاس یا نام همکاران را وارد میکنند. دکمه «بارگیری از فایل» نیز به همین وعده عمل میکند: مرورگر شما فایل را میخواند و کادر را بهصورت محلی پر میکند، بدون اینکه چیزی در اینترنت بارگذاری شود.
گزینهها برای فهرستهایی طراحی شدهاند که کاربران در دنیای واقعی دارند. تنظیمات «جداکننده» بهطور پیشفرض روی «خودکار» قرار دارد، که تفاوت بین خطوط جدید و کاماها را تشخیص میدهد و میفهمد فهرست شما از کدام یک استفاده میکند؛ بنابراین اطلاعات کپیشده از یک صفحه گسترده، پیام چت یا سند متنی بدون نیاز به هیچگونه تغییر فرمت توسط شما، بهدرستی کار میکند. وقتی دادههای شما ترکیبی از فرمتهای مختلف است، آن را روی «خط جدید»، «کاما» یا «فاصله» قفل کنید — و توجه داشته باشید که انتخاب «فاصله» همیشه یک تصمیم آگاهانه است و هرگز خودکار انجام نمیشود، زیرا مواردی مانند نام و نامخانوادگی خودشان دارای فاصله هستند و جدا کردن خودکار آنها بیشتر از اینکه مشکل را حل کند، فهرستها را خراب میکند. فیلد «تعداد» مشخص میکند که چند مورد استخراج شود، از ۱ تا ۱۰۰. آیا میخواهید سه برنده را از بین ۲۰۰ شرکتکننده قرعهکشی کنید؟ اسامی آنها را بچسبانید، «تعداد» را روی ۳ تنظیم کنید و «تولید» را بزنید. دو تنظیمات فقط زمانی قابل استفاده هستند که تعداد روی ۲ یا بیشتر باشد و تا آن زمان غیرفعال (خاکستری) میمانند: کلید «بدون تکرار» که تعیین میکند آیا یک مورد میتواند دو بار قرعهکشی شود یا خیر، و «قالب خروجی» که مشخص میکند نتایج چگونه از هم جدا شوند — «هر کدام در یک خط جدید»، «جدا شده با فاصله» یا «جدا شده با کاما».
ردیفی از دکمهها در داخل کادر «موارد» ویرایشهایی را انجام میدهند که در غیر این صورت باید جای دیگری انجام میدادید. «بارگیری از فایل» فهرستی را مستقیماً از یک فایل متنی ساده یا CSV استخراج میکند. «مخلوط کردن» ترتیب موارد داخل کادر را به هم میریزد، «مرتب سازی» آنها را به ترتیب الفبا و اعداد را بهصورت طبیعی مرتب میکند و کلیک دوم روی آن ترتیب را برعکس میکند، و «پاک کردن» کادر را کاملاً خالی میکند. دکمه «پر کردن با داده های نمونه» یک فهرست کوتاه آزمایشی را قرار میدهد تا بتوانید ابزار را با یک کلیک امتحان کنید، در حالی که «گسترش به تناسب محتوا» کادر را باز میکند تا یک فهرست طولانی بهطور کامل نمایش داده شود و «جمع کردن به اندازه پیش فرض» آن را به حالت اول برمیگرداند. در زیر نتیجه، «کپی همه» هر انتخاب را در کلیپبورد شما قرار میدهد، «ذخیره در فایل» آنها را در دستگاه شما ذخیره میکند و «تاریخچه» ۱۰ قرعهکشی اخیر شما را در مرورگرتان نگه میدارد، تا نتیجه قبلی تنها با یک کلیک در دسترس باشد.
انتخاب در واقع چگونه انجام میشود؟ وقتی دکمه «تولید» را میفشارید، صفحه از مرورگر میخواهد مقادیر تصادفی را از طریق crypto.getRandomValues دریافت کند و از آنها برای انتخاب موقعیتها در فهرست شما استفاده میکند، به جای اینکه به تابع شبهتصادفی Math.random() در JavaScript متکی باشد. تبدیل یک مقدار خام ۳۲-بیتی به یک موقعیت، همان جایی است که ابزارهای انتخابگر معمولاً در سکوت اشتباه میکنند: تقسیم مقدار بر طول فهرست و گرفتن باقیمانده (پیمانه) بدیهیترین رویکرد است، اما در عین حال رویکردی سوگیرانه است. دلیل آن این است که مگر در حالتی که 2^32 دقیقاً بر طول فهرست بخشپذیر باشد، مواردی که در ابتدای فهرست قرار دارند کمی بیشتر از بقیه انتخاب میشوند. این نقص modulo bias (سوگیری پیمانهای) نامیده میشود و کاملاً قابل اندازهگیری است، نه صرفاً تئوری. در مقابل، این ابزار هر مقداری را که از بزرگترین مضرب دقیق طول فهرست فراتر رود دور میریزد و دوباره قرعهکشی میکند — تکنیکی که به آن rejection sampling (نمونهبرداری با رد کردن) میگویند. این روش به قیمت چند قرعهکشی اضافی در پسزمینه تمام میشود، اما به جای یک تضمین تقریبی، یک تضمین دقیق ارائه میدهد. موقعیت در فهرست هیچچیز را تغییر نمیدهد: اولین مورد و آخرین مورد در هر قرعهکشی احتمال کاملاً یکسانی دارند.
کلید «بدون تکرار» دو نوع قرعهکشی کاملاً متفاوت را از هم جدا میکند و در آمار برای هر کدام یک نام وجود دارد. وقتی این گزینه روشن باشد، ابزار یک کپی از فهرست شما را با الگوریتم Fisher-Yates به هم میریزد و موارد را از بالا برمیدارد — دقیقاً مانند بیرون کشیدن نامها از یک کلاه بدون برگرداندن آنها، بنابراین هیچکس دو بار انتخاب نمیشود و شانس انتخاب برای هر گروهی با آن اندازه کاملاً برابر است. به این روش نمونهبرداری بدون جایگذاری (sampling without replacement) میگویند و دقیقاً همان چیزی است که برای برندگان جوایز، تشکیل تیمها و تعیین نوبت به آن نیاز دارید. وقتی این گزینه خاموش باشد، هر انتخاب بهطور مستقل از کل فهرست انجام میشود، بنابراین یک مورد مشابه میتواند بیش از یک بار ظاهر شود — این روش نمونهبرداری با جایگذاری (sampling with replacement) است که زمانی کاربرد دارد که همه در هر دور همچنان واجد شرایط باقی میمانند، مانند قرعهکشیهای متوالی یا یک نمونهگیری آماری سریع. هیچیک از این دو حالت عادلانهتر از دیگری نیستند؛ آنها فقط به نیازهای متفاوتی پاسخ میدهند.
یک قرعهکشی عادلانه قرار نیست ظاهری عادلانه داشته باشد. اگر پنج نام را از بین ده نام بیرون بکشید، به احتمال زیاد دو انتخابی را میبینید که در فهرست اولیه کنار هم قرار داشتهاند، یا اگر تکرار مجاز باشد یک نام دو بار پشت سر هم ظاهر میشود — و هر یک از این اتفاقات کاملاً عادی است. هر قرعهکشی مستقل است: انتخابهای قبلی هیچ تأثیری بر انتخابهای بعدی ندارند و هیچ موردی صرفاً به این دلیل که زمان زیادی گذشته است «موعد» پیروزیاش فرا نمیرسد. غریزهای که بر خلاف این موضوع اصرار دارد، مغالطه قمارباز (gambler's fallacy) نامیده میشود و همان غریزهای است که باعث میشود خود ما انسانها در انتخابهای تصادفی ضعیف عمل کنیم — وقتی از ما خواسته میشود بهصورت تصادفی انتخاب کنیم، از انتخاب اولین و آخرین مورد پرهیز میکنیم، سعی میکنیم نامی را تکرار نکنیم و انتخابهایمان را بسیار یکنواختتر از آنچه شانس واقعی رقم میزند توزیع میکنیم. نتیجهای که بهطور مشکوکی منظم و مرتب به نظر میرسد، اثر انگشت انسان است؛ تصادفی بودن واقعی باعث ایجاد خوشهها و تراکمها میشود.
چرا باید از این ابزار انتخاب تصادفی استفاده کنید؟
- قرعهکشی فقط در مرورگر: فهرست شما در دستگاه خودتان خوانده میشود و هرگز به جایی ارسال نمیگردد
- تصادفی بودن با Web Crypto API: امنیت رمزنگاریشده، به جای تکیه بر Math.random()
- بدون سوگیری پیمانهای: تکنیک rejection sampling شانس مساوی برای هر ورودی را حفظ میکند
- سازگار با هر ساختار فهرستی: هر کدام در یک خط، جدا شده با کاما، یا فاصله، بدون نیاز به تغییر فرمت
- حالت «بدون تکرار»: برندگان یا تیمهایی را مشخص کنید بدون اینکه کسی دو بار انتخاب شود
- پشتیبانی از ۱۰۰۰ مورد و تا ۱۰۰ انتخاب در یک قرعهکشی
- ابزارهای داخلی مدیریت فهرست: بارگیری از فایل، مخلوط کردن، مرتبسازی، پاک کردن و دادههای نمونه
- تاریخچه و ذخیره در فایل: نگهداری سوابق قرعهکشی که ممکن است نیاز به توجیه و اثبات داشته باشد
- نامحدود و رایگان: بدون نیاز به ثبتنام، بدون محدودیت استفاده، هیچچیز در سرورهای ما ذخیره نمیشود
انتخاب تصادفی در هر جایی که یک تصمیم باید در برابر شک و پرسش مقاوم باشد، کاربرد پیدا میکند. معلمان بدون هیچگونه تبعیضی از دانشآموزان درس میپرسند و کلاس را به گروههای پروژه تقسیم میکنند. استریمرها و بازاریابها برندگان جوایز و قرعهکشیها را در مقابل مخاطبانی انتخاب میکنند که باید نتیجه را باور کنند. مدیران وظایفی را که هیچکس داوطلب انجامشان نیست تقسیم میکنند و تیمها نوبت ارائهها یا کشیکها را مشخص میکنند. پژوهشگران یک نمونه تصادفی از سوابق را برای ممیزی استخراج میکنند. در ایام نوروز نوبت بازیهای خانوادگی با قرعه تعیین میشود، خانوادهها به بحث درباره اینکه چه برنامهای تماشا کنند پایان میدهند و یک گروه گرسنه رستوران را انتخاب میکنند. وجه مشترک همه اینها انتخابی است که هر کسی میتواند بعداً آن را توضیح دهد: این قرعهکشی از تصادفی بودن رمزنگاریشده استفاده میکند، کاملاً در دستگاه شما اتفاق میافتد، و اگر کسی بعداً در مورد آن سوالی بپرسد، بخش «تاریخچه» نتیجه را حفظ کرده است.
دانستن چند محدودیت صادقانه این ابزار خالی از لطف نیست. ابزار نمیتواند موارد متمایز بیشتری از آنچه در فهرست شما وجود دارد استخراج کند — سه برنده حداقل به سه نام نیاز دارند — و محدودیت آن ۱۰۰۰ ورودی با حداکثر ۲۰۰ نویسه برای هر کدام است، با قابلیت تا ۱۰۰ انتخاب در یک قرعهکشی. دکمههای «مخلوط کردن» و «مرتب سازی» خط به خط کار میکنند، بنابراین فهرستی که با کاما جدا شده و فقط در یک خط قرار دارد تنها زمانی تغییر چینش میدهد که به هر ورودی در یک خط تبدیل شود؛ هر دوی آنها کادر را دوباره میچینند و نه خود قرعهکشی را، که صرف نظر از ترتیب ورودیهای شما به یک اندازه عادلانه است. همچنین بر اساس طراحی، هر مورد وزن و شانس کاملاً یکسانی دارد، بنابراین در قرعهکشیای که یک نام باید دو برابر شانس داشته باشد، لازم است آن نام را دو بار در فهرست بنویسید. در چارچوب این محدودیتها، تضمین ارائهشده محکم است — هر مورد در فهرست شما شانس کاملاً یکسانی در هر قرعهکشی دارد.