Потрібно розіграти приз, викликати учня до дошки або вирішити, хто йде виносити сміття? Цей безкоштовний онлайн-інструмент випадкового вибору чесно обирає з будь-якого списку, який ви вставите. Додайте свої записи в поле «Елементи» — по одному на рядок або через кому — вкажіть потрібне число за допомогою поля «Кількість» і натисніть «Згенерувати». Список потребує принаймні двох записів і вміщує їх до 1000, кожен довжиною до 200 символів.
Кожен вибір виконується безпосередньо у вашому браузері за допомогою Web Crypto API (crypto.getRandomValues), яке забезпечує криптографічно надійні випадкові значення на основі системної випадковості вашого браузера. Ваш список ніколи не надсилається на наш сервер, тому ми ніколи не бачимо його й не фіксуємо в логах — і тут це важливіше, ніж у більшості генераторів, оскільки люди зазвичай вставляють базу клієнтів, класний журнал або імена своїх колег. Кнопка «Завантажити з файлу» дотримується цієї ж обіцянки: ваш власний браузер читає файл і заповнює поле виключно локально, нічого нікуди не завантажуючи.
Параметри створені для форматів даних, які люди справді використовують. Опція «Роздільник» стоїть на «Автоматично», що самостійно розрізняє перенесення рядків і коми та визначає, який саме варіант використовує ваш список, щоб текст, скопийований з таблиці, повідомлення або документа, працював без жодного переформатування. Якщо у ваших даних формати змішані, зафіксуйте її на варіантах «Новий рядок», «Кома» або «Пробіл» — і врахуйте, що «Пробіл» завжди є свідомим вибором і ніколи не застосовується автоматично, оскільки такі записи, як повні імена, самі містять пробіли, і розділення за ними зламало б більше списків, ніж виправило. Поле «Кількість» визначає, скільки записів слід витягнути: від 1 до 100. Розігруєте трьох переможців серед 200 учасників? Вставте імена, встановіть «Кількість» на 3 і натисніть «Згенерувати». Два елементи керування застосовуються лише тоді, коли це число сягає 2 або більше, а до того залишаються неактивними: «Без повторень», яке вирішує, чи може один і той самий запис випасти двічі, і «Формат результату», яке визначає, як розділяються виділені елементи — «По одному на рядок», «Через пробіл» або «Через кому».
Ряд кнопок безпосередньо у полі «Елементи» виконує редагування, яке вам інакше довелося б робити деінде. Функція «Завантажити з файлу» підтягує список прямо зі звичайного текстового файлу або CSV. Кнопка «Перемішати» випадковим чином змінює порядок записів у полі, «Сортувати» вишиковує їх за алфавітом із природним сортуванням чисел (а повторне натискання повертає порядок назад), тоді як «Очистити» повністю звільняє поле. Кнопка «Вставити приклад» додає короткий демонстраційний список, щоб ви могли випробувати інструмент в один клік, а «Розгорнути на весь список» збільшує поле для повного відображення довгого тексту; після чого «Згорнути» повертає його до початкового розміру. Одразу під результатом функція «Скопіювати все» відправляє кожен вибір у буфер обміну, «Зберегти у файл» записує їх на диск, а ваша «Історія» зберігає останні 10 жеребкувань у браузері, щоб до попереднього результату можна було повернутися одним кліком.
Як саме відбувається вибір? Коли ви натискаєте «Згенерувати», сторінка запитує у браузера випадкові значення через crypto.getRandomValues і використовує їх для вибору позицій у вашому списку, замість того, щоб покладатися на псевдовипадкову функцію JavaScript, таку як Math.random(). Перетворення сирого 32-бітного значення на позицію — це саме те місце, де генератори непомітно помиляються: обчислення остачі від ділення значення на довжину списку (модуль) є очевидним і водночас упередженим підходом, оскільки, якщо довжина не ділить 2^32 без остачі, елементи на початку списку випадатимуть трохи частіше за інші. Ця вада називається modulo bias (спотворення за модулем), і вона є цілком вимірною, а не просто теоретичною. Натомість цей інструмент відкидає будь-яке значення, що виходить за межі найбільшого точного кратного довжині списку, і тягне жереб знову — метод, що має назву rejection sampling (вибірка з відхиленням). Це коштує кількох додаткових циклів, але гарантує точну надійність замість приблизної. Позиція у списку нічого не змінює: перший і останній елементи мають абсолютно однакову ймовірність під час кожного розіграшу.
Перемикач «Без повторень» розділяє два принципово різні види жеребкування, і статистика має для кожного з них окрему назву. Коли він увімкнений, інструмент тасує копію вашого списку за допомогою алгоритму Fisher-Yates і забирає елементи зверху — це те саме, що тягнути квитки з капелюха і не класти їх назад, тож жоден запис не обирається двічі, і будь-яка група такого розміру є однаково ймовірною. Це вибірка без повернення (sampling without replacement), і саме вона потрібна для визначення переможців, поділу на команди та встановлення черговості. Коли перемикач вимкнено, кожен вибір здійснюється незалежно з усього списку, тому той самий запис може випасти більше одного разу — це вибірка з поверненням (sampling with replacement), яка застосовується тоді, коли всі залишаються у грі в кожному раунді, як-от під час повторних розіграшів або швидкої статистичної вибірки. Жоден з режимів не є більш справедливим за інший; вони просто вирішують різні завдання.
Справедливе жеребкування взагалі не повинно виглядати справедливо. Витягніть п'ять імен з десяти, і ви регулярно бачитимете два результати, що стояли поруч у початковому списку, або одне й те саме ім'я двічі поспіль, щойно дозволите повторення — і кожен такий випадок є абсолютно нормальним. Коли режим «Без повторень» вимкнено, кожен вибір є незалежним: попередні вибори не мають жодного впливу на наступні, і жоден елемент ніколи не стає «черговим» претендентом на виграш. Інстинкт, який переконує нас у зворотному, — це помилка гравця (gambler's fallacy), і саме через нього ми самі дуже погано робимо випадковий вибір. Якщо попросити людину обирати навмання, ми уникаємо першого й останнього елементів, намагаємося не повторювати імена і розподіляємо свій вибір значно рівномірніше, ніж це будь-коли робить справжня випадковість. Підозріло охайний результат з більшою ймовірністю вигаданий людиною, ніж отриманий випадково; випадкові вибори утворюють скупчення.
Чому варто обрати цей інструмент випадкового вибору?
- Жеребкування лише в браузері: ваш список читається на пристрої і ніколи не надсилається на наш сервер
- Випадковість через Web Crypto API: криптографічно надійно, а не Math.random()
- Без спотворення за модулем: вибірка з відхиленням дає усім елементам рівні шанси
- Будь-який формат списку: автоматично по одному на рядок або через кому, через пробіл — за вибором
- Режим «Без повторень»: визначайте переможців або команди так, щоб жоден запис не був обраний двічі
- До 1000 елементів і до 100 результатів за один розіграш
- Вбудовані інструменти: завантаження з файлу, тасування, сортування, очищення, приклад даних
- Історія та збереження у файл: зберігайте копію кожного вибору
- Без обмежень та безкоштовно: жодної реєстрації, жодних лімітів використання, нічого на наших серверах
Випадковий вибір стає у пригоді всюди, де рішення має витримати будь-які сумніви. Вчителі в Україні викликають учнів до дошки без улюбленців і справедливо ділять клас на проектні групи. Стримери та маркетологи розігрують призи перед аудиторією, яка повинна вірити результату. Менеджери роздають завдання, за які ніхто не береться добровільно, а команди визначають черговість презентацій чи чергувань. Дослідники витягують випадкову вибірку записів для аудиту. Родини припиняють суперечки про те, що подивитися, а голодна компанія обирає ресторан. Спільною рисою є вибір, який згодом зможе пояснити будь-хто: розіграш використовує криптографічну випадковість, відбувається виключно на вашому пристрої, а «Історія» зберігає результат на потім — хоча для публічного розіграшу збережіть список учасників і результат до оголошення, адже історія браузера — це зручність, а не доказ.
У цього інструмента є кілька об'єктивних обмежень, про які варто знати. Він не може витягнути більше унікальних записів, ніж містить ваш список — для трьох переможців потрібно принаймні три імена — і зупиняється на 1000 елементах по 200 символів кожен, дозволяючи щонайбільше 100 результатів за один розіграш. Кнопки «Перемішати» та «Сортувати» працюють порядково, тому список через кому, вставлений одним рядком, буде перетасовано лише тоді, коли кожен елемент опиниться на новому рядку; крім того, обидві ці функції змінюють лише саме поле, а не розіграш, який залишається однаково об'єктивним незалежно від порядку записів. Кожен елемент також зумисно має абсолютно однакову вагу, тому жеребкування, де одне ім'я має рахуватися за два, вимагає, щоб це ім'я було вказане у списку двічі. У цих межах гарантія є максимально чіткою: під час кожного вибору кожен запис, який усе ще бере участь у жеребкуванні, має абсолютно однакові шанси.