Jak podzielić x liczbę graczy na 2 drużyny losowo wiele razy, za każdym razem inaczej?

Mam problem matematyczny w kodzie JavaScript. Muszę losowo podzielić daną liczbę graczy na 2 drużyny, tak aby za każdym razem - jeśli gracze chcą zagrać ponownie - drużyny były tworzone ponownie i powinny się różnić, aż wszystkie kombinacje zostaną utworzone.

Powiedzmy, że mam 4 graczy, więc wszystkie kombinacje są następujące:
[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]

Ponieważ jednak drużyna nie liczy się, istnieją tylko 3 różne kombinacje:

[1,2] vs [3,4]
[1,3] vs [2,4]
[1,4] vs [2,3]

Gdy liczba rozegranych gier przekracza liczbę kombinacji, powinna zacząć się od nowa ... tzn. Losowo wybrać jedną z trzech kombinacji, wybierając losowo następną i tak dalej ...

Ale jest pewien zwrot ... i moje umiejętności matematyczne idą dość mocno na południe, gdy liczba graczy jest nieparzysta, a jeden z graczy musi odpocząć na jednej grze. W przypadku 5 graczy wszystkie kombinacje są następujące (ostatnia liczba to gracz odpoczywający):

[1,2] vs [3,4] [5]
[1,2] vs [3,5] [4]
[1,2] vs [4,5] [3]

[1,3] vs [2,4] [5]
[1,3] vs [2,5] [4]
[1,3] vs [4,5] [2]

[1,4] vs [2,3] [5]
[1,4] vs [2,5] [3]
[1,4] vs [3,5] [2]

[1,5] vs [2,3] [4]
[1,5] vs [2,4] [3]
[1,5] vs [3,4] [2]

[2,3] vs [4,5] [1]
[2,4] vs [3,5] [1]
[2,5] vs [3,4] [1]

Jak to możliwe w JavaScript, aby utworzyć te zespoły?

Jedną z rzeczy, które przyszły mi na myśl, było nadanie każdemu graczowi unikalnej wartości (10 ^ x), np .:

player1.value = 10;
player2.value = 100;
player3.value = 1000;
player4.value = 10000;

... a następnie podczas zapętlania, aby utworzyć zespoły, sprawdź, czy całkowita wartość drużyny jest równa ostatnim wartościom.

Czy ktoś może być bardziej utalentowany matematycznie / JavaScript, pomóż mi z tym problemem kodowania. Dzięki!

questionAnswers(2)

yourAnswerToTheQuestion