CodeKitHub
Русский
Генераторы

Бесплатный рандомайзер списков

Вставьте список — имена, задачи, участников розыгрыша, что угодно — по одному элементу на строку, и перемешайте его в справедливом случайном порядке с помощью настоящего перемешивания Фишера-Йетса. Включите режим выбора победителей, чтобы вытянуть только N случайных элементов — удобно для выбора победителя розыгрыша или назначения случайного порядка без раскрытия всего перемешанного списка.

Что это за инструмент?

Рандомайзер списков переупорядочивает набор элементов в случайную последовательность или извлекает из него случайное подмножество. Сложность в том, чтобы сделать это без смещения: наивный подход, например сортировка массива со случайной функцией сравнения, даёт смещённое распределение, при котором некоторые порядки встречаются гораздо чаще других.

Этот инструмент использует алгоритм перемешивания Фишера–Йетса (Дурстенфельда) — стандартный метод получения доказуемо равномерной случайной перестановки: каждый возможный порядок вашего списка равновероятен.

Зачем его использовать?

  • По-настоящему беспристрастное перемешивание — Фишер–Йетс, а не распространённый антипаттерн sort(() => Math.random() - 0.5), который искажает результаты.
  • Режим выбора победителей: вытяните ровно N случайных элементов вместо перемешивания всего списка — идеально для розыгрышей и лотерей.
  • Опциональное удаление дубликатов перед перемешиванием — для списков, где могли случайно оказаться повторы.
  • Работает с любым текстом — именами, задачами, билетами, призами — по одному элементу на строку.
  • Конфиденциально: перемешивание происходит полностью в вашем браузере, ничего не отправляется на сервер.

Как использовать

  1. Вставьте список в поле, по одному элементу на строку.
  2. При необходимости отметьте «удалить дубликаты перед перемешиванием», если список может содержать повторы.
  3. Для полной перестановки просто нажмите «Перемешать». Для выбора победителей отметьте опцию N элементов и укажите, сколько вытянуть.
  4. Скопируйте результат — нажимайте «Перемешать» снова в любой момент для нового случайного порядка или нового розыгрыша.

Пример

Ввод

Alice
Bob
Charlie
Diana
Ethan

Результат

Случайно переупорядоченный список, например Charlie, Ethan, Alice, Diana, Bob — при каждом нажатии «Перемешать» результат другой.

При режиме выбора победителей, установленном на 2, тот же ввод может дать только Ethan и Alice — это независимый случайный выбор 2 элементов, а не первые 2 из одного перемешанного порядка.

Почему наивное перемешивание даёт смещённые результаты

sort(() => Math.random() - 0.5) — распространённый приём, который выглядит правильным, но таковым не является: он полагается на то, что алгоритм сортировки вызывает функцию сравнения определённое число раз в определённом порядке, а реальные реализации сортировки этого не гарантируют. На практике это приводит к перемешиванию, в котором определённые порядки встречаются чаще других — достаточно незаметно при беглом взгляде, но статистически измеримо при большом числе запусков.

Фишер–Йетс полностью обходит эту проблему: вместо того чтобы просить алгоритм сортировки косвенно создать случайность, он напрямую меняет местами каждую позицию со случайной оставшейся позицией ровно один раз, что доказуемо равномерно независимо от реализации сортировки в используемом языке.

Генератор случайных чисел · Генератор UUID

Часто задаваемые вопросы

Почему бы просто не использовать array.sort(() => Math.random() - 0.5)?

Эта строка — хорошо известный антипаттерн: sort() в JavaScript не гарантирует, что каждая пара элементов будет сравнена одинаковое число раз, поэтому итоговый порядок оказывается заметно смещён в пользу определённых перестановок — некоторые элементы с большей вероятностью, чем при настоящей случайности, оказываются ближе к началу или концу. Фишер–Йетс полностью избегает этой проблемы по своей конструкции, и именно этот алгоритм реально реализован в данном инструменте.

Действительно ли порядок перемешивания беспристрастен?

Да. Фишер–Йетс проходит список один раз, и на каждом шаге меняет местами текущий элемент с равномерно случайно выбранным элементом из ещё не перемешанной части. Математически доказано, что это даёт каждый возможный порядок с равной вероятностью при хорошем источнике случайности (Math.random() в JavaScript).

В чём разница между режимом перемешивания и режимом выбора победителей?

Режим перемешивания переупорядочивает все элементы вашего списка и показывает их все, только в новом порядке. Режим выбора победителей вытягивает только N случайных элементов и показывает только их — удобно, когда нужно выбрать фиксированное число победителей или образцов, не раскрывая весь переупорядоченный список.

Можно ли использовать это для настоящего розыгрыша призов?

Да, для неформальных розыгрышей и лотерей это отлично подходит, поскольку случайность действительно равномерна. Для юридически регулируемого розыгрыша с денежными призами проверьте местное законодательство — в некоторых юрисдикциях требуется определённый, поддающийся проверке процесс розыгрыша.

Изменяет ли удаление дубликатов мой исходный список?

Нет — удаление дубликатов влияет только на перемешанный результат, и только когда флажок включён. Ваш исходный список остаётся точно таким, каким вы его ввели, поэтому можно переключать опцию и перемешивать заново, не вводя всё заново.

Похожие инструменты