Skip to content
Snippets Groups Projects
Verified Commit c701791c authored by iliya.saroukha's avatar iliya.saroukha :first_quarter_moon:
Browse files

feat: computing fixed code

parent 6aa28209
No related branches found
No related tags found
No related merge requests found
...@@ -4,6 +4,10 @@ import numpy as np ...@@ -4,6 +4,10 @@ import numpy as np
import pprint import pprint
import math import math
import argparse import argparse
import string
LIST_ALPHABET = list(string.ascii_lowercase) + list(string.digits)
DICT_ALPHABET = {item: index + 1 for index, item in enumerate(LIST_ALPHABET)}
@dataclass @dataclass
class Node: class Node:
...@@ -46,28 +50,41 @@ def insert_char(tree: Node, char: str): ...@@ -46,28 +50,41 @@ def insert_char(tree: Node, char: str):
swap(tree) swap(tree)
def compute_vitter_params(m: int) -> (int, int): def compute_vitter_params(m: int) -> tuple[int, int]:
e = math.floor(np.log2(m)) e = math.floor(np.log2(m))
r = m - (2 ** e) r = m - (2 ** e)
return (e, r) return (e, r)
def main(string: str) -> None: def compute_k(char: str) -> int:
print(compute_vitter_params(26)) return DICT_ALPHABET[char]
def compute_code(char: str):
e, r = compute_vitter_params(len(LIST_ALPHABET))
k_char = compute_k(char)
if k_char <= 2*r:
bin_val = k_char - 1
n_bits = e + 1
return bin(bin_val)[2:].zfill(n_bits)
else:
bin_val = k_char - r - 1
return bin(bin_val)[2:].zfill(e)
def main(string: str) -> None:
tree = Node() tree = Node()
enc = []
for c in string: for c in string:
pprint.pp(tree) pprint.pp(tree)
print(f'\n====== Inserting \'{c}\' ======\n') print(f'\n====== Inserting \'{c}\' ======\n')
insert_char(tree, c) insert_char(tree, c)
enc.append(compute_code(c))
pprint.pp(tree) pprint.pp(tree)
pprint.pp(enc)
# pprint.pp(tree)
if __name__ == "__main__": if __name__ == "__main__":
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment