Defining a new base-type in Python based off Hexavigesimal
Peter Otten
__peter__ at web.de
Wed Nov 30 14:05:50 EST 2011
Alec Taylor wrote:
> On Thu, Dec 1, 2011 at 3:18 AM, Ian Kelly <ian.g.kelly at gmail.com> wrote:
>> On Wed, Nov 30, 2011 at 8:19 AM, Alec Taylor <alec.taylor6 at gmail.com>
>> wrote:
>>> Good evening,
>>>
>>> I have defined a new numbering structure for certain mathematical
>>> advantages.
>>>
>>> How do I implement this in Python, or would I be better off writing
>>> this in C or C++?
>>>
>>> Ultra concise definition: http://i42.tinypic.com/af7w4h.png
>>> LaTeX source: http://pastebin.tlhiv.org/Kf6jPRkI
>>>
>>> Thanks for all suggestions,
>>
>> So if I am understanding your definition correctly your hexavigesimals
>> are ordered like this?
>>
>> 0, 1, ..., 9, A, B, ..., P,
>>
>> 0A, 0B, ..., 0P,
>> 1A, 1B, ..., 1P,
>> ...,
>> 9A, 9B, ..., 9P,
>>
>> A0, A1, ..., A9,
>> B0, B1, ..., B9,
>> ...,
>> P0, P1, ..., P9
>>
>> And that's it, since your constraints preclude anything with more than 2
>> digits?
>
> To put it simply:
>
> I want a hexavigesimal of length n where each element contains at
> least one letter {A, B, ..., P} and one number {0, 1, 2, ... }.
> (unless n is less than 2, in which case only one of those constraints
> need to be met)
>
> and I want addition only for incrementing the element.
>
> Why do I want all this I hear you ask? - For use as a
> unique-identifier. I want a unique-ID of size 3. (3 positions, i.e.
> P0A)
>
> Any suggestions on how to implement this in python would be appreciated.
Maybe you don't need a class if you produce the ids with a generator like
so:
>>> from itertools import product
>>> def hxv(n):
... letters = "ABCDEFGHIJKLMNOP"
... digits = "0123456789"
... both = digits + letters
... if n == 1:
... for x in both:
... yield x
... else:
... for x in product(*[both]*n):
... s = "".join(x)
... if not s.isdigit() and not s.isalpha():
... yield s
...
>>> ids = hxv(3)
>>> next(ids)
'00A'
>>> next(ids)
'00B'
>>> for i, x in enumerate(hxv(3)): pass
...
>>> i, x
(12479, 'PP9')
More information about the Python-list
mailing list