import random
def process_line(line, window_dict):
new_line = []
for i in range(0, len(line) - 2):
window = tuple(line[i:i+3])
new_line.append(window_dict[window])
return new_line
def get_random_seq(n):
seq = []
for _ in range(n):
seq.append(random.randint(0,1))
return seq
class Tree:
def __init__(self, root):
self.root = root
class Node:
def __init__(self, value: int, left, center, right):
self.value = value
self.left = left
self.center = center
self.right = right
def __str__(self):
if self is None:
return "*"
return str(self.value)
def get_children(self):
return tuple(self.left, self.center, self.right)
def get_value(self):
return self.value
def get_left_child(self):
return self.left
def get_center_child(self):
return self.center
def get_right_child(self):
return self.right
def main():
line = get_random_seq(25)
window_dict = {(0,0,0): 0, (0,0,1): 1, (0,1,0): 1, (0,1,1): 1, (1,0,0):1, (1,0,1): 0, (1,1,0): 0, (1,1,1):0}
list_of_lines = []
list_of_lines.append(line)
count = 0
while len(line) >= 3:
offset = ""
for i in range(0, count):
offset = offset + " "
out = offset + str(line)
print(out)
line = process_line(line, window_dict)
list_of_lines.append(line)
count = count + 1
offset = ""
for i in range(0, count):
offset = offset + " "
out = offset + str(line)
print(out)
rev_lines = list_of_lines[::-1]
def create_node(lines, level, idx):
if (level == len(lines) - 1):
return Node(lines[level][idx], None, None, None)
return Node(lines[level][idx], create_node(lines, level + 1, idx), create_node(lines, level + 1, idx + 1), create_node(lines, level + 1, idx + 2))
def print_tree(root):
lists = []
lists.append([])
lists[0].append(root.value)
lists.append([])
lists[1].append(str(root.left))
lists[1].append(str(root.center))
lists[1].append(str(root.right))
lists = print_left(root.left, 2, lists)
lists = print_right(root.right, 2, lists)
for i in lists:
print(i)
def print_left(node, level, lists):
if node is None:
return lists
if level >= len(lists):
lists.append([])
lists[level].append(str(node.left))
lists[level].append(str(node.center))
lists[level].append(str(node.right))
lists = print_left(node.left, level+1, lists)
return print_right(node.right, level+1, lists)
def print_right(node, level, lists):
if node is None:
return lists
if level >= len(lists):
lists.append([])
lists[level].append(str(node.center))
lists[level].append(str(node.right))
return print_right(node.right, level+1, lists)
if __name__ == "__main__":
main()