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

wip: i think im correct

parent dbfdf7df
No related branches found
No related tags found
No related merge requests found
from __future__ import annotations
import code
from dataclasses import dataclass
import numpy as np
import pprint
......@@ -8,6 +7,7 @@ import argparse
import string
LIST_ALPHABET = list(string.ascii_lowercase) + list(string.digits)
# LIST_ALPHABET = list(string.ascii_lowercase)
DICT_ALPHABET = {item: index + 1 for index, item in enumerate(LIST_ALPHABET)}
@dataclass
......@@ -28,19 +28,54 @@ def swap(tree: Node):
tree.left = tmp
def find_char(tree: Node, char: str) -> Node | None:
if tree:
if tree.right:
_ = find_char(tree.right, char)
# def compute_prefix(tree: Node, char: str) -> str:
# prefix = ''
#
# if tree:
# if tree.value == char:
# return ''
#
# if tree.left:
# prefix = '0' + compute_prefix(tree.left, char)
#
# if tree.right:
# prefix = '1' + compute_prefix(tree.right, char)
#
# return prefix
def compute_prefix(tree: Node, char: str) -> str:
if tree.value == char:
return ''
if tree.left:
_ = find_char(tree.left, char)
left_result = compute_prefix(tree.left, char)
if left_result is not None:
return '0' + left_result
if tree.right:
right_result = compute_prefix(tree.right, char)
if right_result is not None:
return '1' + right_result
return None # char not found in this subtree
def find_char(tree: Node, char: str) -> Node | None:
if tree:
if tree.value == char:
print(tree)
return tree
else:
return None
if tree.left:
n = find_char(tree.left, char)
if n:
return n
if tree.right:
n = find_char(tree.right, char)
if n:
return n
......@@ -92,25 +127,48 @@ def compute_code(char: str):
return bin(bin_val)[2:].zfill(e)
def main(string: str) -> None:
def encode(string: str) -> list[str]:
tree = Node()
fixed_code = []
encoded: list[str] = []
seen: set[str] = set()
for c in string:
fixed_code.append(compute_code(c))
pprint.pp(fixed_code)
for c in string:
pprint.pp(tree)
print(f'\n====== Inserting \'{c}\' ======\n')
insert_char(tree, c)
prefix = find_char(tree, c)
pprint.pp(tree)
if c not in seen:
seen.add(c)
encoded.append(prefix.nyt_code)
encoded.append(compute_code(c))
else:
encoded.append(compute_prefix(tree, c))
return ' '.join(encoded)[1:]
n = find_char(tree, 'k')
pprint.pp(n)
def main(string: str) -> None:
msg = encode(string)
print(msg)
# def main(string: str) -> None:
# tree = Node()
# fixed_code = []
#
# for c in string:
# fixed_code.append(compute_code(c))
#
# pprint.pp(fixed_code)
#
# for c in string:
# pprint.pp(tree)
# print(f'\n====== Inserting \'{c}\' ======\n')
# insert_char(tree, c)
#
# pprint.pp(tree)
#
# n = find_char(tree, 'o')
#
# pprint.pp(n)
if __name__ == "__main__":
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment