圣诞节快到了:是时候决定谁要给谁送礼物了。我正在寻找这样的算法。
以列表(1 to 10)
为例,创建随机对以确保:
- 每个项目都与另一个项目相关联;
- 没有任何项目与自身相关联;
- 每个项目只关联一次。
很明显,一个简单的洗牌是不够的:
Random.shuffle(1 to 10)
.toSeq
.zipWithIndex
例如:
1 -> 2
2 -> 4
3 -> 1
4 -> 3
但不是(1
送给自己的礼物):
1 -> 1
2 -> 3
3 -> 4
4 -> 2
我一直在考虑限制 HList 但是:
- 我已经无法表达
- 这可能有点矫枉过正(即使很有趣)
- 可能有算法可以确保“通过构造”