¿Qué tan difícil es hacerlo a mano? Me refiero al 1er problema. Al igual que Luis, pienso que la dificultad es que no existe una única cantidad de grupos, depende de cómo los hagas. Lo interesante podría ser cual es el mínimo de grupos así que pueden formarse, y cual el máximo. Sino lo que estás planteando es que cada par de números DEBE estar en 2 grupos.
Veamos distintos métodos de agrupar.
1: Intentamos hacer siempre la misma, cambiando lo mínimo posible:
0123
0124
Tenemos (de los - hacia abajo/izquierda no pongo números porque son los reflejos de los otros):
0123456789
0-2211
1 -211
2 -11
3 -
4 -
5 -
6 -
7 -
8 -
9 -
En el foro creo que se pueden hacer tablas pero no sé si es fácil, Excel está bien. Pero quizá así sea más fácil:
Pares que están en 2 grupos: 01, 02, 12
En 1: 03, 04, 13, 14, 23, 24
Nueva combinación: 0345
2: 01, 02, 03, 04, 12
1: 05, 13, 14, 23, 24, 34, 35, 45
El conteo puede ser mareador pero en cada nueva combinación ocurren 6 pares, así que el total de pares en 2 grupos*2+el de uno debería dar un divisible entre 6 o está mal. Debería ser 6, 12, 18... En este caso 18. Tenemos 5 en el 1er grupo, *2 son 10, +8 del 2ndo, vamos bien.
0567
2: 01, 02, 03, 04, 05, 12
1: 06, 07, 13, 14, 23, 24, 34, 35, 45, 56, 57, 67
Me aburrí xP
Un programa que te genere combinaciones random con la restricción sería algo como...
Repetir
Repetir
Numero1 = random(10)
Repetir
Numero2 = random(10)
mientras Numero1 == Numero2
Repetir
Numero3 =
Tengo una mejor manera:
PosiblesValores = "0123456789"
// Generar grupos:
Repetir:
// Generar un grupo:
Repetir:
PosiblesAhora = PosiblesValores
Puntero = 0
Repetir:
Puntero++
L = Largo de PosiblesAhora
"N"+Puntero = Caracter nro random (L) de PosiblesAhora
De PosiblesAhora quitar el nro de caracter elegido
mientras Puntero<4
// Ver si los pares ya ocurrieron:
Repetir = "No"
Si eval("P"+N1+N2) == 2
Repetir == "Sí"
sino si eval("P"+N1+N3) == 2
Repetir == "Sí"
sino si eval("P"+N1+N4) == 2
Repetir == "Sí"
sino si eval("P"+N2+N3) == 2
Repetir == "Sí"
sino si eval("P"+N2+N4) == 2
Repetir == "Sí"
sino si eval("P"+N3+N4) == 2
Repetir == "Sí"
mientras Repetir == "Sí"
// Actualizar contadores de pares:
("P"+N1+N2)++
("P"+N1+N3)++
("P"+N1+N4)++
("P"+N2+N3)++
("P"+N2+N4)++
("P"+N3+N4)++
mientras quierasEse programa generaría combinaciones al azar, evitando que tengan los mismos números (por ejemplo evita 0012). Luego mira si los pares ya ocurrieron 2 veces. Si ocurrieron se repite. Esa repetición tardará más entre más grupos hayas producido y no hay manera de saber si va a producir uno nuevo o ya es imposible. Hacer un programa mejor, que te busque todas las posibles formas mediante distintos métodos, es más complicado...