2013-03-05 1 views
0

숫자 배열 ([1,2,3,4,5,6,7,8,9,10])이 있습니다. 이 숫자는 선수를 나타냅니다. 나는이 선수들이 서로 정확히 한 번 "놀아"주고 싶다.고유 그룹의 배열 쌍을 쌍으로 배열

이 게임에서는 "라운드"를 만들어야합니다. 이 라운드에는 짝수 개의 경기가 포함되며 각 플레이어는 최대 1 회까지만 라운드를 할 수 있습니다. 홀수 개의 경기가있는 경우 최종 라운드보다 불규칙한 경기가 좋음을 나타냅니다.

최종 결과는 "원형"배열의 배열입니다. 이 둥근 배열에는 플레이어 간의 일치가 포함됩니다. 그 결과 다음과 같은되고 있지만, 전체 :

[[[1,2],[3,4],[5,6],[7,8],[9,10]],[[1,3],[2,4],[5,7],[6,8],[9,1],[10,2]]]

내가 만든 일치를 가져 오기위한 Array#combination을 발견했습니다,하지만 난 제대로 구축하기 위해 라운드를 얻을 수없는 것.

답변

2

이것을 라운드 로빈 토너먼트라고합니다.

Round 2. (1 plays 13, 14 plays 12, ...) 
1 14 2 3 4 5 6 
13 12 11 10 9 8 7 

그리고 회전 유지 :

Round 3. (1 plays 12, 13 plays 11, ...) 
1 13 14 2 3 4 5 
12 11 10 9 8 7 6 

위키 백과는 다음 algorithm

Round 1. (1 plays 14, 2 plays 13, ...) 
1 2 3 4 5 6 7 
14 13 12 11 10 9 8 

다음 한 경쟁 (이 예에서는 숫자 하나를) 수정하고 다른 사람들이 시계 방향으로 한 위치를 돌려 준다 홀수 플레이어는 게임이없는 라운드 당 하나의 플레이어에 의해 처리됩니다 (종종 더미 플레이어를 추가하여 구현됩니다).

+0

이것은 정확히 제가 찾고 있었던 것입니다, 감사합니다 @steenslag. – WedTM