Деление списка на группы
Пять задач из одного списка: команды поровну, группы по размеру, пары, тайный Санта и случайная очередь. Считается в браузере, список никуда не отправляется.
—
Пять задач
Что умеет каждый режим
На N групп. Делит поровну: если участники не делятся нацело, остаток раскидывается по одному, начиная с первой группы. Из 10 человек на 3 команды получится 4, 3 и 3 — разница между группами никогда не больше одного человека.
По размеру группы. Наоборот: вы говорите, сколько человек в команде, а число команд считается само. Последняя может оказаться неполной — так честнее, чем молча выкидывать лишних.
На пары. Спарринги, интервью, обмен работами. При нечётном числе последний остаётся без пары, и генератор об этом прямо пишет.
Тайный Санта. Строится один замкнутый круг: каждый дарит следующему, последний — первому. В такой схеме никто не достаётся сам себе и не бывает изолированных пар, которые дарят только друг другу.
Очередь. Просто перемешанный список: порядок выступлений, дежурства, очерёдность ходов.
Как это устроено
Почему деление честное
Список перемешивается тасовкой Фишера — Йетса: на каждом шаге текущий элемент меняется местом со случайным из оставшихся. Это единственный способ получить действительно равновероятную перестановку — популярная «сортировка со случайным сравнением» такой гарантии не даёт.
Случайность берётся из crypto.getRandomValues, того же источника, что создаёт пароли на этом сайте. Обычный Math.random() для жеребьёвки не годится: его состояние восстанавливается по нескольким результатам, а значит следующий результат предсказуем.
Ничего из введённого не уходит на сервер. Если нужен результат, который можно показать посторонним и доказать, что вы не перемешивали до нужного расклада, — это выбор победителя: там список фиксируется заранее, а итоги проверяются любым участником.
Тайный Санта: важная деталь
Круг дарения виден целиком тому, кто нажал кнопку. Если хотите сохранить интригу и для себя, попросите нажать человека вне игры — или разошлите каждому только его строку, не показывая остальные.
Вопросы
Частые вопросы
Как делится остаток, если поровну не выходит?
Лишние участники раскидываются по одному, начиная с первой группы: из 10 человек на 3 команды получится 4, 3 и 3. Разница между самой большой и самой маленькой группой никогда не превышает одного человека — это самое честное деление из возможных.
Может ли тайный Санта подарить сам себе?
Нет. Мы строим один замкнутый круг дарения: первый дарит второму, второй третьему и так далее, последний — первому. В такой схеме никто не достаётся сам себе и не бывает замкнутых пар, когда двое дарят только друг другу, а остальные остаются в стороне.
Данные списка куда-то уходят?
Нет, весь расчёт идёт в браузере. Если нужен публичный результат, который можно показать посторонним, воспользуйтесь выбором победителя: там список фиксируется на сервере и итоги проверяются любым участником.
Насколько случайным получается деление?
Список перемешивается тасовкой Фишера — Йетса на криптографическом генераторе, том же, что создаёт пароли. Обычный Math.random() для жеребьёвки не годится: его состояние восстанавливается по нескольким результатам.
Что делать с нечётным числом при делении на пары?
Последний участник остаётся без пары, и мы честно об этом пишем. Обычно его добавляют к любой паре третьим или он становится ведущим — решать вам, генератор не прячет эту ситуацию.
Дальше