Разделить на команды онлайн

Случайно и честно разделите участников на команды. Вставьте список, укажите число команд — рандомайзер равномерно распределит людей.

Как работает деление на команды

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

Где пригодится распределитель команд

Как разделить список на команды

  1. Впишите или вставьте участников — по одному имени в строке.
  2. Укажите, на сколько команд разделить (2, 3, 4 и больше).
  3. Нажмите «Разделить на команды» — сервис покажет состав каждой команды.

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

Как это устроено: алгоритм честного деления

Многие похожие сервисы перемешивают список функциями вроде rand() или mt_rand() (алгоритм «Вихрь Мерсенна») — они быстрые, но не криптографические: при определённых условиях последовательность можно предсказать. Для жеребьёвки, от которой зависит реальный результат — турнир, распределение задач, конкурс — этого недостаточно.

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

// Криптостойкое честное перемешивание (Фишер–Йейтс на random_int)
for ($i = count($shuffled) - 1; $i > 0; $i--) {
    $j = random_int(0, $i);
    [$shuffled[$i], $shuffled[$j]] = [$shuffled[$j], $shuffled[$i]];
}

// Равномерное распределение по кругу
foreach ($shuffled as $idx => $name) {
    $teams[$idx % $teamCount][] = $name;
}

После перемешивания участники раскладываются по командам по кругу (остаток от деления индекса на число команд). Раз порядок уже случаен, такое распределение само по себе не добавляет смещения — и гарантирует, что разница в размере команд не превышает одного человека.

Другие инструменты рандомайзера

Отзывы и комментарии

Войдите, чтобы оставить отзыв или комментарий

Я Войти через Яндекс

Пока нет комментариев. Будьте первым!