File tree Expand file tree Collapse file tree 1 file changed +29
-0
lines changed
source_py3/python_toolbox Expand file tree Collapse file tree 1 file changed +29
-0
lines changed Original file line number Diff line number Diff line change 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 ]))
You can’t perform that action at this time.
0 commit comments