41 lines
No EOL
1 KiB
Python
41 lines
No EOL
1 KiB
Python
# stolen from this stack overflow answer and modified: https://stackoverflow.com/a/1119769
|
|
|
|
alphabet = "0123"
|
|
|
|
def encode(num):
|
|
"""Encode a positive number into Base X and return the string.
|
|
|
|
Arguments:
|
|
- `num`: The number to encode
|
|
- `alphabet`: The alphabet to use for encoding
|
|
"""
|
|
if num == 0:
|
|
return alphabet[0]
|
|
arr = []
|
|
arr_append = arr.append # Extract bound-method for faster access.
|
|
_divmod = divmod # Access to locals is faster.
|
|
base = len(alphabet)
|
|
while num:
|
|
num, rem = _divmod(num, base)
|
|
arr_append(alphabet[rem])
|
|
arr.reverse()
|
|
return ''.join(arr)
|
|
|
|
def decode(string):
|
|
"""Decode a Base 4 encoded string into the number
|
|
|
|
Arguments:
|
|
- `string`: The encoded string
|
|
- `alphabet`: The alphabet to use for decoding
|
|
"""
|
|
base = len(alphabet)
|
|
strlen = len(string)
|
|
num = 0
|
|
|
|
idx = 0
|
|
for char in string:
|
|
power = (strlen - (idx + 1))
|
|
num += alphabet.index(char) * (base ** power)
|
|
idx += 1
|
|
|
|
return num |