Lets talk some more basics: perm(x,y) simply permutes y with the permutation x, right? And the regex in the first post of the original thread (lets call it origperm()) does a few different(!) but fixed (if I didn't read the code wrong) permutations.
Now you could just find out the permutation that is the sum of all permutations done on the string. That would be quite fast but not very exiting. Instead you want to calculate each single permutation done by each single invocation of the origperm regex, so that y=perm(yourcalculatedperm_n,y) is equivalent to the n-th invocation of y=origperm_n(y) ?
If Ithis is not the case (and I suspect I'm wrong somewhere), please enlighten me/us.
PS: I have not tried to decipher comp(). I assume that it would be a lot faster if you just tell us what it does in mathematical terms. This might be true for your whole question. A math question is best asked in math language