Деление списка на группы

Пять задач из одного списка: команды поровну, группы по размеру, пары, тайный Санта и случайная очередь. Считается в браузере, список никуда не отправляется.

—

Считается в браузере — список никуда не отправляется

Пять задач

Что умеет каждый режим

На N групп. Делит поровну: если участники не делятся нацело, остаток раскидывается по одному, начиная с первой группы. Из 10 человек на 3 команды получится 4, 3 и 3 — разница между группами никогда не больше одного человека.

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

На пары. Спарринги, интервью, обмен работами. При нечётном числе последний остаётся без пары, и генератор об этом прямо пишет.

Тайный Санта. Строится один замкнутый круг: каждый дарит следующему, последний — первому. В такой схеме никто не достаётся сам себе и не бывает изолированных пар, которые дарят только друг другу.

Очередь. Просто перемешанный список: порядок выступлений, дежурства, очерёдность ходов.

Как это устроено

Почему деление честное

Список перемешивается тасовкой Фишера — Йетса: на каждом шаге текущий элемент меняется местом со случайным из оставшихся. Это единственный способ получить действительно равновероятную перестановку — популярная «сортировка со случайным сравнением» такой гарантии не даёт.

Случайность берётся из crypto.getRandomValues, того же источника, что создаёт пароли на этом сайте. Обычный Math.random() для жеребьёвки не годится: его состояние восстанавливается по нескольким результатам, а значит следующий результат предсказуем.

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

Тайный Санта: важная деталь

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

Вопросы

Частые вопросы

Как делится остаток, если поровну не выходит?

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

Может ли тайный Санта подарить сам себе?

Нет. Мы строим один замкнутый круг дарения: первый дарит второму, второй третьему и так далее, последний — первому. В такой схеме никто не достаётся сам себе и не бывает замкнутых пар, когда двое дарят только друг другу, а остальные остаются в стороне.

Данные списка куда-то уходят?

Нет, весь расчёт идёт в браузере. Если нужен публичный результат, который можно показать посторонним, воспользуйтесь выбором победителя: там список фиксируется на сервере и итоги проверяются любым участником.

Насколько случайным получается деление?

Список перемешивается тасовкой Фишера — Йетса на криптографическом генераторе, том же, что создаёт пароли. Обычный Math.random() для жеребьёвки не годится: его состояние восстанавливается по нескольким результатам.

Что делать с нечётным числом при делении на пары?

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

Дальше

Другие инструменты

Скопировано