Como dividir x número de jogadores em 2 equipes aleatoriamente várias vezes, diferentemente toda vez?

Eu tenho um problema matemático no meu código JavaScript. Eu preciso dividir um dado número de jogadores em 2 times aleatoriamente para que a cada vez - se os jogadores quiserem jogar novamente - as equipes sejam formadas novamente e elas devem ser diferentes até que todas as combinações sejam formadas.

Digamos que eu tenha 4 jogadores, então todas as combinações são as seguintes:
[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]

No entanto, como o lado da equipe não conta, existem apenas três combinações diferentes:

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

Quando o número de jogos jogados excede o número de combinações, deve começar tudo de novo ... ou seja, selecionar aleatoriamente uma das três combinações, selecionando aleatoriamente a próxima e assim por diante ...

Mas há uma reviravolta ... e minhas habilidades matemáticas vão bem ao sul quando o número de jogadores é estranho, e um dos jogadores precisa descansar um jogo. Então, com 5 jogadores, todas as combinações de match-up são (o último número sendo o jogador descansando):

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

Como é possível, em JavaScript, formar essas equipes?

Uma coisa que veio em mente foi dar a cada jogador um valor único (10 ^ x), por exemplo:

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

... e, em seguida, quando em loop para formar equipes, verifique se um valor total da equipe é igual aos últimos valores.

Alguém matematicamente / mais talentoso por favor me ajude com este problema de codificação. Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion