On Wed, May 6, 2009 at 11:42 PM, Todd Benson <(E-Mail Removed)> wrote:

> On Wed, May 6, 2009 at 11:32 AM, Martin DeMello <(E-Mail Removed)>=
wrote:

>>

>>> out =3D ""

>>> while n > 0

>>> =A0 =A0rest, units =3D n.divmod(62)

>>> =A0 =A0out =3D digits[units] + out

>>> =A0 =A0n =3D rest

>>> end

>

> Isn't that just a simple cipher (i.e. map)? =A0I must be missing

> something. =A0According to what I've read so far, base64 is not, and

> base62 is, except for that paper written in a scientific journal that

> I don't have access to (but, for the summary, of course). =A0I suppose

> that is what the OP wanted anyway.
No, it's a number base transformation. Here's an example using base 7

(as being easier to work with than 62

):

letting n =3D 1250, and using # as a divmod operator:

1250 # 7 =3D 178, 4

178 # 7 =3D 25, 3

25 # 7 =3D 3, 4

3 # 7 =3D 0, 3 <-- we have reached n=3D0, so the loop terminates

so 1250[base 10] =3D 3434 [base 7]

If you think about it, base 10 works the same way:

1250 # 10 =3D 125, 0

125 # 10 =3D 12, 5

12 # 10 =3D 1, 2

1 # 10 =3D 0, 1

so 1250[base 10] =3D 1250[base 10]

To go the other way, you repeatedly add the least significant digit

and multiply by the base

so 3434[7]

start with 0, and read the digits in forward order

(0 * 7) + 3 =3D 3

3 * 7 + 4 =3D 25

24 * 7 + 3 =3D 178

178 * 7 + 4 =3D 1250 <--- et voila!

martin

martin