Skip to content

Commit e7b00ab

Browse files
committed
-
1 parent 8e176fe commit e7b00ab

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Copyright 2009-2015 Ram Rachum.
2+
# This program is distributed under the MIT license.
3+
4+
from python_toolbox import sequence_tools
5+
6+
7+
class NumberEncoder:
8+
def __init__(self, characters):
9+
self.characters = \
10+
sequence_tools.ensure_iterable_is_immutable_sequence(characters)
11+
recurrences = sequence_tools.get_recurrences(self.characters)
12+
if recurrences:
13+
raise Exception('`characters` must not have recurring characters.')
14+
15+
def encode(number, minimum_length=1):
16+
current_number = number
17+
result = ''
18+
while current_number:
19+
current_number, modulo = divmod(current_number,
20+
len(self.characters))
21+
result = self.characters[modulo] + result
22+
if len(result) <= minimum_length:
23+
result = (self.characters[0] * (minimum_length - len(result))) + result
24+
return result
25+
26+
def decode(self, string):
27+
assert isinstance(string, (str, bytes))
28+
return sum((len(self.characters)**i) * self.characters.index(x)
29+
for (i, x) in enumerate(string[::-1]))

0 commit comments

Comments
 (0)