# Deveploed by Mark Zitnik
# selected map can be change scrambled
map = ['a','b','c','d','e','f','g','h','i','j','k','l','1','H']
map_dict = {}
base = len(map)
# create a bi-directional dict
for item in range(base):
map_dict[item] = map[item]
map_dict[map[item]] = item
def i_to_map_base(num):
if num == 0: return map_dict[0]
base_str = []
while num > 0:
base_str.append(map_dict[ num % base ])
num = num / base
base_str.reverse()
return ''.join(base_str)
def map_base_to_i(str):
x = [a for a in str]
x.reverse()
value = 0
for i in range(len(x)):
item = x[i]
value += (map_dict[item] * pow(base,i))
return value
# test code
for i in range(1000):
str = i_to_map_base(i)
val = map_base_to_i(str)
print 'i[%s] : [%s:%s]' % (i , str , val)