Как разделить количество игроков на 2 команды случайным образом несколько раз, каждый раз по-разному?

У меня есть математическая проблема в моем коде JavaScript. Мне нужно случайным образом разделить определенное количество игроков на 2 команды, чтобы каждый раз & # x2013; если игроки хотят играть снова & # x2013; команды формируются снова, и они должны быть разными, пока не сформированы все комбинации.

Допустим, у меня 4 игрока, поэтому все комбинации следующие:
[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]

Однако, поскольку сторона команды не учитывает, существует только 3 различные комбинации:

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

Когда количество сыгранных игр превышает количество комбинаций, оно должно начинаться заново ... то есть случайным образом выбирается одна из трех комбинаций, случайным образом выбирается следующая и так далее ...

Но есть поворот ... и мои математические навыки идут довольно далеко на юг, когда число игроков нечетное, и один из игроков должен отдохнуть одну игру. Итак, с 5 игроками все комбинации совпадают (последний номер - это отдыхающий игрок):

[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]

Как в JavaScript возможно сформировать эти команды?

Одна вещь, которая пришла в голову, состояла в том, чтобы дать каждому игроку уникальное значение (10 ^ x), например:

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

... и затем при циклическом формировании команд проверяют, равно ли одно общее значение команды последним значениям.

Может кто-нибудь математически / более талантливо, пожалуйста, помогите мне с этой проблемой кодирования. Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос