Bien, he regresado xD
Vengo a explicarte por que se usa asi el tema de la posicion:
Examinemos el codigo si?
Lo primero que hacemos es guardar el valor de i, que es el indicador del numero de combinacion general en la que estamos.
Luego entrmos en el for que hace las combinaciones.
El orden se determina por
gp[gp_len -j -1] = list[n % list_len];
n /= list_len;
gp -> grupo, gp_len -> largo del grupo, j-> posicion actual en el grupo, -1 porque el indice esta basado en ceros
list es la lista de elementos permutables en el grupo.
Entonces:
para cada elemento de gp le en la posicion donde estamos en el bucle (-1) se da el valor del elemento del grupo en relacion al largo del grupo de elementos intercambiables en el round actual (round = valor de i), luego se ajusta n con el largo del grupo deseado.
Esto es asi dado que cada permutacion tiene asociado un numero, si "0000" es 0, "0001" es 1, y "AAAA" es X
No se explicarme muy bien, tendria que agarrar latex y escribirte la formula algebraica de generacion de permutaciones.
Basicamente es que tenes un grupo vacio de universo hasta X elementos.
De tal manera que vas a seleccionar dependiendo del numero un elemento Y para meterlo y puede ser biyectiva(es decir tener dos valores iguales dentro del grupo X partiendo del mismo elemento en Y)