¿Cómo dividir x número de jugadores en 2 equipos al azar varias veces, de manera diferente cada vez?

Tengo un problema matemático en mi código JavaScript. Necesito dividir un número dado de jugadores en 2 equipos al azar para que cada vez, si los jugadores quieren volver a jugar, los equipos se vuelvan a formar y sean diferentes hasta que se formen todas las combinaciones.

Digamos que tengo 4 jugadores, por lo que todas las combinaciones son las siguientes:
[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]

Sin embargo, como el equipo no cuenta, solo hay 3 combinaciones diferentes:

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

Cuando el número de juegos jugados excede el número de combinaciones, debería comenzar de nuevo ... es decir, seleccionar aleatoriamente una de las tres combinaciones, seleccionar aleatoriamente la siguiente y así sucesivamente ...

Pero hay un giro ... y mis habilidades matemáticas van bastante hacia el sur cuando la cantidad de jugadores es impar, y uno de los jugadores necesita descansar un juego. Entonces, con 5 jugadores, todas las combinaciones de emparejamiento son (el último número es el jugador en reposo):

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

¿Cómo es posible en JavaScript para formar esos equipos?

Una cosa que se me ocurrió fue darle a cada jugador un valor único (10 ^ x), por ejemplo:

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

... y luego, cuando realice un bucle para formar equipos, verifique si el valor total del equipo es igual a los últimos valores.

¿Podría alguien con más talento matemático / JavaScript, por favor ayudarme con este problema de codificación? ¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta