Що це за інструмент?
Рандомізатор списку переставляє набір пунктів у випадковому порядку або витягує з нього випадкову підмножину. Складність у тому, щоб зробити це без упередженості: наївний підхід, наприклад сортування масиву за допомогою випадкової функції порівняння, дає викривлений розподіл, у якому деякі порядки набагато ймовірніші за інші.
Цей інструмент використовує алгоритм перемішування Фішера — Єйтса (Дурстенфельда), стандартний метод для доведено рівномірної випадкової перестановки — кожен можливий порядок вашого списку однаково ймовірний.
Навіщо його використовувати?
- Справді неупереджене перемішування — Фішер — Єйтс, а не поширений антипатерн sort(() => Math.random() - 0.5), який викривлює результати.
- Режим вибору переможців: витягніть рівно N випадкових пунктів замість перемішування всього списку — ідеально для розіграшів.
- Опційне видалення дублікатів перед перемішуванням для списків, які можуть містити випадкові повтори.
- Працює з будь-яким текстом — імена, завдання, квитки, призи — по одному пункту на рядок.
- Приватно: перемішування відбувається повністю у вашому браузері, нічого не завантажується.
Як користуватися
- Вставте свій список у поле, по одному пункту на рядок.
- За бажанням позначте «видалити дублікати перед перемішуванням», якщо список може містити повтори.
- Для повного перемішування просто натисніть «Перемішати». Для вибору переможців позначте опцію N-пунктів і вкажіть, скільки витягти.
- Скопіюйте результат — натискайте «Перемішати» знову в будь-який момент для нового випадкового порядку чи нового розіграшу.
Приклад
Введення
Аліса
Богдан
Віктор
Дарина
ЄвгенРезультат
Випадково переставлений список, наприклад: Віктор, Євген, Аліса, Дарина, Богдан — щоразу інший при натисканні «Перемішати».У режимі вибору переможців із значенням 2 той самий ввід може натомість дати лише Євгена та Алісу — випадковий вибір із 2 пунктів, а не 2-пунктовий зріз одного перемішаного порядку.
Чому наївне перемішування дає викривлені результати
sort(() => Math.random() - 0.5) — поширений трюк, який виглядає коректним, але таким не є: він покладається на те, що алгоритм сортування викликає функцію порівняння певну кількість разів у певному порядку, а реальні реалізації сортування цього не гарантують. На практиці це дає перемішування, у якому певні порядки з'являються частіше за інші — достатньо тонко, щоб пройти повз побіжний погляд, але статистично помітно при багатьох запусках.
Фішер — Єйтс обходить цю проблему повністю: замість того, щоб просити алгоритм сортування опосередковано створити випадковість, він напряму міняє місцями кожну позицію з випадковою позицією, що залишилась, рівно один раз, що доведено дає рівномірний результат незалежно від реалізації сортування в мові програмування.
Часті запитання
Чому б просто не використати array.sort(() => Math.random() - 0.5)?
Цей одноряковий трюк — відомий антипатерн: sort() у JavaScript не гарантує, що кожна пара елементів порівнюється однакову кількість разів, тож отриманий порядок помітно викривлений на користь певних перестановок — деякі пункти опиняються ближче до початку чи кінця частіше, ніж дала б справжня випадковість. Фішер — Єйтс уникає цього повністю за своєю конструкцією, і саме цей алгоритм реалізовано в цьому інструменті.
Чи справді порядок перемішування неупереджений?
Так. Фішер — Єйтс проходить список один раз, і на кожному кроці міняє поточний елемент місцями з рівномірно випадковим елементом із решти неперемішаної частини. Математично доведено, що це дає кожен можливий порядок з однаковою ймовірністю за наявності хорошого джерела випадковості (Math.random() у JavaScript).
У чому різниця між перемішуванням і режимом вибору переможців?
Режим перемішування переставляє кожен пункт вашого списку і показує всі їх, просто в новому порядку. Режим вибору переможців витягує лише N випадкових пунктів і показує тільки їх — корисно, коли потрібно обрати фіксовану кількість переможців чи зразків, не розкриваючи весь перемішаний список.
Чи можна використати це для справжнього розіграшу призів чи лотереї?
Так, для неформальних розіграшів і жеребкувань це чудово підходить, оскільки випадковість справді рівномірна. Для юридично регульованого розіграшу з грошовими призами перевірте місцеве законодавство — деякі юрисдикції вимагають конкретного процесу жеребкування, який можна перевірити.
Чи змінює видалення дублікатів мій оригінальний список?
Ні — видалення дублікатів впливає лише на перемішаний результат, і тільки коли увімкнено відповідний прапорець. Ваш вхідний список залишається точно таким, як ви його ввели, тож можна перемикати опцію та перемішувати знову без повторного введення тексту.