in reply to Speeding permutation counting

Most solutions as of yet are working on a char by char basis.

Treating them as numbers seems to be more natural. Using binary does not handle the 1+1 carry over. Switching to decimal provides the required carry over space:

Basically you do this:

1 * 1010 + 2 * 1100 = ---------- 3210

I'll leave it to others to count 0s 1s 2s and 3s, put some loops around and to benchmark it. This drastically reduces the required operations. I expect it to be some orders of magnitude faster. Math::BigInt also provides a C speedup.