Cleanup broken algorithm and some simple refactors.

This commit is contained in:
gamerdonkey 2025-08-26 23:17:36 -05:00
parent 418b5ae28d
commit d993a70ac7

View File

@ -2,6 +2,24 @@ from anytree import LevelOrderGroupIter
from anytree.importer import JsonImporter from anytree.importer import JsonImporter
from sys import argv from sys import argv
def build_rows_depth_first(node, rows, leaf_count=0):
for child in sorted(node.children, key=lambda x: x.size, reverse=True):
leaf_count = build_rows_depth_first(child, rows, leaf_count)
if node.is_leaf:
cur_row = leaf_count
rows[cur_row].append(f'<td>{node.name}</td>')
leaf_count += 1
else:
child_leaves = len(node.leaves)
cur_row = leaf_count - child_leaves
rows[cur_row].append(f'<td rowspan="{child_leaves}">{node.name}</td>')
return leaf_count
if len(argv) < 2: if len(argv) < 2:
print(f"usage: {argv[0]} <json file>") print(f"usage: {argv[0]} <json file>")
exit() exit()
@ -9,62 +27,12 @@ if len(argv) < 2:
with open(argv[1], 'r') as f: with open(argv[1], 'r') as f:
root = JsonImporter().read(f) root = JsonImporter().read(f)
rows = []
leaves = []
for i in range(len(root.leaves)):
rows.append([])
leaves.append({"name":"wrong"})
cur_row = 0
for level in LevelOrderGroupIter(root):
cur_row = 0
for node in sorted(level, key=lambda x: x.size, reverse=True):
leaf_count = len(node.leaves)
if False: #node in root.leaves:
leaves[cur_row] = node
else:
rows[cur_row].append(f'<td rowspan="{leaf_count}">{node.name}</td>')
cur_row += max(leaf_count, 1)
last_depth = node.depth
print(leaves)
for i, leaf in enumerate(leaves):
#rows[i].append(f"<td>{leaf.name}</td>")
rows[i].reverse()
print("<tr>")
for cell in rows[i]:
print(f" {cell}")
print("</tr>")
output_rows = [] output_rows = []
rows = []
for i in range(len(root.leaves)): for i in range(len(root.leaves)):
output_rows.append([]) output_rows.append([])
def depth_first_search(node, rows, leaf_count): build_rows_depth_first(root, output_rows)
for child in sorted(node.children, key=lambda x: x.size, reverse=True):
leaf_count = depth_first_search(child, rows, leaf_count)
if node.is_leaf:
cur_row = leaf_count
rows[cur_row].append(f'<td>{node.name}</td>')
leaf_count += 1
else:
cur_row = leaf_count - len(node.leaves)
rows[cur_row].append(f'<td rowspan="{len(node.leaves)}">{node.name}</td>')
return leaf_count
depth_first_search(root, output_rows, 0)
for row in output_rows: for row in output_rows:
print("<tr>") print("<tr>")