Обмен подарками срывается предсказуемо. Две самые частые причины одинаковы: кто-то вытягивает самого себя, а кто-то — человека, которому уже дарил подарок в прошлом году.
И то, и другое решаемо, но второе — только если заранее сообщить об этом инструменту.
Что делает распределение
Генератор Тайного Санты соединяет каждого ровно с одним другим человеком. Сопоставление случайно, и автоматически соблюдаются два условия:

Никто не вытягивает себя. Это математическое свойство: перестановка без неподвижных точек называется беспорядком, и построить её можно несколькими способами — это инструмент и делает.
Ваши исключения соблюдаются. Перед генерацией можно отметить пары, которых быть не должно: люди, живущие вместе, руководитель и его подчинённый, двое, которым это будет неловко. Генератор повторяет попытки, пока не получит распределение, удовлетворяющее всем им.
Всё остальное — дело случая. В этом и смысл.
Настройка
Внесите всех, по одному в строке. Используйте полные имена — «Алексей Иванов», а не «Алексей»: инструмент не различает двух Алексеев, а дубликат — не та пара, которая кому-то нужна.
Добавьте исключения. Этот шаг обычно пропускают, а именно он определяет, годится ли результат. Частые исключения: партнёры и супруги, члены семьи, двое, которые вечно дарят друг другу одинаковые подарки, руководитель и тот, кого он оценивает.
Задайте бюджет, если он у вас есть. Бюджет отображается в результатах и в скопированных сообщениях — на сопоставление он не влияет. Это стоит знать, если вы ждали обратного.
Сгенерируйте. Когда инструмент сообщает, что не может соблюсти все исключения, это реальный сигнал, а не ошибка для повтора. Обычно это значит, что ограничения загнали кого-то в угол: проверьте, не исключил ли кто-то всех остальных, — тогда любое допустимое сопоставление невозможно.
Как сообщить людям
Copy slip создаёт короткое сообщение для одного человека — с получателем и бюджетом. Copy all создаёт полный список.
Это самая неловкая часть всей затеи: кто-то должен раздать результаты, и он видит все пары. Отдельной приватной ссылки для каждого человека в инструменте нет.
Это нормально, если все знают друг друга, а веселье — в последующей тайне. Это проблема, если смысл в том, чтобы руководитель не знал, кто кого вытянул; тогда отправьте каждому личное сообщение или проведите жеребьёвку, не раскрывая, кто её проводил.
Скажите, что распределение окончательное. Это самое важное, что нужно заявить заранее: как только кому-то не понравится его пара, желание перезапустить будет огромным. Перезапуск превращает честную процедуру в поиск удобного результата, и все это видят.
Приёмы, которые помогают
Сначала займитесь исключениями. Десятиминутный разговор о том, кого нельзя ставить в пару, избавит от ссоры в декабре.
Объявите правила до генерации. Окончательность, бюджет, срок покупки и дату обмена.
Назначьте реальный срок. Подарки в последний момент покупают плохо. Обычный ответ — две недели, и именно названная дата помогает обмену состояться в назначенный день, а не сдвигаться.
Сохраняйте тайну после. Вся затея работает, потому что никто не знает. Если объявить пары публично в тот же день, ожидание исчезает и никто уже не переживает.
Когда случайность — неправильный выбор
Когда отношения имеют значение. Семейному обмену подарками среди тех, кто не все ладит, случайность не поможет. Она лишает вас контроля над парой, которая была важна.
Когда вы хотите наградить или поблагодарить конкретного человека. Жеребьёвку нельзя подтолкнуть, а если вам хочется её подтолкнуть, вам нужно ручное распределение.
Для небольших групп, которые можно хорошо разбить вручную. При четырёх участниках каждый видит все возможные пары, включая ту, которой вы хотите избежать. Инструмент экономит те же три секунды, что понадобились бы, чтобы записать всё от руки.
Когда исключения невозможно соблюсти. В группе из трёх человек, где двое исключают друг друга, верного ответа нет. Инструмент вам об этом скажет; решение — пересмотреть ограничение, а не повторять попытки.
Замечание о случайности
Сопоставление использует криптографический источник случайности браузера, а не Math.random(), который детерминирован и в принципе может быть восстановлен для предсказания результатов. Там, где действуют ограничения, генератор перемешивает и повторяет попытки, пока не найдёт допустимую расстановку, — до ограниченного числа попыток, после чего сообщает о неудаче, а не возвращает вариант, нарушающий ваши исключения.
Страница о честности описывает механизм.
Об этом поведении с повторами стоит знать: сопоставление — не единый равномерный выбор из всех допустимых расстановок, потому что повторные попытки отдают предпочтение вариантам, которые легко удовлетворить. Для обмена подарками это неважно — никто не может отличить одну расстановку от другой. Это было бы важно для розыгрыша с призом, где честный подход — единый выбор из допустимого набора.
Как провести
Запишите исключения, сгенерируйте и сразу скопируйте сообщения в личные чаты. Затем произнесите слово «окончательно» вслух, прежде чем кто-либо ответит.
Готовы? Откройте генератор Тайного Санты и вставьте свой список.