(phixonline)--> with javascript_semantics function factSum(int n) integer s = 0, f = 1 for i=1 to n do f *= i s += f end for return s end function procedure superPerm(int n) atom t0 = time() string chars = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[1..n] integer f = factorial(n) sequence perms = repeat("",f) for i=1 to f do perms[i] = permute(i,chars) end for string res = perms[$] perms = perms[1..$-1] while length(perms) do integer best = 0, bi = length(perms) for i=1 to length(perms) do string pi = perms[i] integer m = length(res), k = find(res[m],pi) for l=k to 1 by -1 do if res[m]!=pi[l] then k = 0 exit end if m -= 1 end for if k>best then best = k bi = i end if end for if match(perms[bi],res) then ?9/0 -- (sanity check) else res &= perms[bi][best+1..$] end if perms[bi] = perms[$] perms = perms[1..$-1] end while integer lr = length(res), fsn = factSum(n) string op = {"<","=",">"}[compare(lr,fsn)+2] t0 = time()-t0 string e = iff(t0>1?", "&elapsed(t0):"") printf(1,"superPerm(%d) len = %d (%s%d%s)\n",{n,lr,op,fsn,e}) end procedure for n=1 to 7 do -- (note: 8 takes 65x longer than 7) superPerm(n) end for