J'utiliserais simplement un code comme le suivant pour mettre en place deux tables de conversion, l'une de node à ASCII, l'autre dans l'autre sens.
L'exemple de code ci-dessous fournit 36
pour un seul caractère, 1,332
pour un maximum de deux caractères, 47,998
pour un maximum de trois caractères et un énorme 1,727,604
pour un maximum de quatre caractères, mais vous devez commencer à vous méfier de la taille des tables à ce stade (la conversion au moment de l'exécution, plutôt que le précalcul des tables de recherche, peut être une meilleure option si vous en arrivez à ce stade).
N'oubliez pas qu'il s'agissait uniquement de chiffres et de lettres minuscules. Si vous décidez d'utiliser des majuscules, les quantités sont les suivantes :
length = 1 node count = 62
2 3,906
3 242,234
4 15,018,570
Un exemple de code est donné ci-dessous :
nd_to_asc = []
asc_to_nd = {}
full_range = range(48,58) + range(97,123)
# One, two, three and four-length codes.
for p1 in full_range:
nd_to_asc.append (chr(p1))
for p2 in full_range:
nd_to_asc.append ("%s%s"%(chr(p1),chr(p2)))
for p3 in full_range:
nd_to_asc.append ("%s%s%s"%(chr(p1),chr(p2),chr(p3)))
for p4 in full_range:
nd_to_asc.append ("%s%s%s%s"%(chr(p1),chr(p2),chr(p3),chr(p4)))
# Reverse lookup.
for i in range(len(nd_to_asc)):
asc_to_nd[nd_to_asc[i]] = i
print len(nd_to_asc)