礼品交换会以可预测的方式失败。最常见的两种其实是一回事:有人抽到了自己,有人抽到了去年已经送过礼物的人。
两者都能解决,而第二种只有你提前告诉工具才能解决。
分配做了什么
礼品选择生成器 把每个人恰好与另一个人配对。匹配是随机的,并自动强制执行两个限制:

没人抽到自己。 这是一个数学性质——没有不动点的排列叫做错排,而构建它的方式不止一种,工具做的就是这件事。
你的排除项会被尊重。 在生成之前,你可以标记不能出现的配对:住在一起的人、经理和他们的直接下属、两个会觉得尴尬的人。生成器会不断重试,直到产生一个满足所有条件的分配。
其余的全靠运气。这正是重点。
设置它
列出所有人,每行一个。 使用全名——“Alex Chen”而不是“Alex”,因为工具无法区分两个 Alex,而重复是没人想要的配对。
添加排除项。 这是人们会跳过的一步,也正是决定结果是否可用的那一步。常见的排除项:伴侣和配偶、家人、那两个总是给对方买一模一样的礼物的人、一个经理与他评估的人配对。
如果要设预算就设一个。 预算会显示在结果和复制的消息上——它不影响匹配,如果你本来以为会影响,这一点值得知道。
生成。 当工具报告无法满足每一条排除项时,那是一个真实的信号,而不是一个可以重试的错误。它通常意味着这些限制把某人逼入了死角——检查一下是不是有人排除了其他所有人,那样任何有效的匹配都不可能。
告诉人们
复制纸条 会为一个人生成一条简短消息,包含收礼者和预算。全部复制 会生成完整名单。
这是整个活动里尴尬的部分:总得有人分发结果,而这个人能看到每一组配对。工具里没有针对每个人的私密链接。
如果大家彼此都认识、乐趣就在于事后的保密,那没问题。如果重点在于经理不知道谁抽到了谁,那就是个问题,这种情况下给每个人发私信,或者在不透露操作者是谁的情况下运行抽签。
说明分配是最终结果。 这是最需要事先讲明的一件事,因为一旦有人不喜欢自己的配对,重新运行的冲动会非常强烈。重新运行会把一个公平的流程变成对偏好结果的搜寻,而且所有人都能看到它发生。
让它奏效的做法
先做排除。 花十分钟讨论谁不能和谁配对,能省下十二月的争吵。
在生成前宣布规则。 最终性、预算、购买截止日期,以及交换的日期。
给一个真正的截止日期。 人们最后一刻买礼物会买得很糟。两周是通常的答案,而一个明确的日期才能让交换在当天真正发生,而不是一直拖。
事后保密。 整件事之所以行得通,就是因为没人知道。如果配对在当天被公开宣布,期待感就没了,也没人会为此紧张了。
随机是错误选择的时机
当关系有分量时。 在一群并不都合得来的人之间进行的家庭礼品交换,随机帮不上忙。它剥夺了你对一段重要配对的控制。
当你想奖励或感谢某个特定的人时。 抽奖无法被悄悄引导,如果你发现自己想引导它,那你要的是手动分配。
对于你能手动配好的小群体。 四个人时,每个人都能看到所有可能的配对,包括你想避免的那一个。工具省下的三秒钟,和你写下来花的时间一样。
当排除项无法满足时。 三个人中有两个人互相排除,就没有有效答案。工具会告诉你;答案是重新考虑这个限制,而不是不停重试。
关于随机性的说明
匹配使用浏览器的密码学随机源,而不是 Math.random(),后者是确定性的,原则上可以被重建以预判结果。在有限制的情况下,生成器会洗牌并重试,直到找到有效的安排——有次数上限,超过后它会报告失败,而不是返回一个违反你排除项的结果。
公平性页面 介绍了这个机制。
这种重试行为值得了解:匹配并不是从所有有效安排中做一次均匀抽取,因为重试会偏向那些容易满足的安排。对礼品交换来说这无关紧要——没人能区分不同的安排。但对有奖品在赌的抽奖来说就重要了,那里公平的做法是从有效集合中做一次抽取。
运行一次
写下排除项,生成,然后立刻把纸条复制到各自的消息里。然后在任何人回复之前,大声说出“最终”这个词。
准备好了吗?打开 礼品选择生成器 粘贴你的名单。