크리스마스가오고 있습니다 : 누구에게 선물을 줄지 결정해야합니다. 나는 그런 알고리즘을 찾고있다. 그 보장 목록 예를 들어 (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에 대한 제약을 생각하고 있었지만 :
- 나는 그것을 표현하지 못하고 그것은 수 있습니다 조금 잔인한 사람 (이 재미 경우에도)
- 는 "건설에 의해"확인 알고리즘이있을 수 있습니다
조건이 충족 될 때까지 셔플을 반복하면 간단하게 두세 번만 시도 할 수 있습니다. –
그게 실제로 옵션입니다 : 아마 작동합니다. 그러나 호기심 때문에, 나는 좀 더 우아한 것이 있는지 궁금해하고있었습니다. –
@PeterdeRivaz는 전체 셔플을 반복 할 필요가 없습니다. 내가 일하는 곳에서 우리는 비니를 사용합니다. 모든 이름을 던지십시오. 모두가 하나를 선택합니다. 너가 너 자신에게 선물을 얻으면, 너의 이름을 다시두고 다른 것을 고르 십시요. –