Skip to content

Commit d745289

Browse files
committed
fix(mindmaps): Group base templates by kernel in family derivation
Fix duplicate section headers when multiple base templates share the same base_for_kernel. Now groups templates by kernel first, then lists all base templates under each kernel section.
1 parent e656917 commit d745289

File tree

1 file changed

+26
-17
lines changed

1 file changed

+26
-17
lines changed

tools/mindmaps/generators/family.py

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,35 @@ def generate_family_derivation(ontology: OntologyData, problems: dict[str, Probl
2929
])
3030
return "\n".join(lines)
3131

32-
for base in sorted(base_problems, key=lambda p: p.leetcode_id):
32+
# Group base templates by kernel
33+
from collections import defaultdict
34+
kernel_groups = defaultdict(list)
35+
for base in base_problems:
3336
kernel = base.base_for_kernel or "General"
37+
kernel_groups[kernel].append(base)
38+
39+
# Sort kernels and base templates within each kernel
40+
for kernel in sorted(kernel_groups.keys()):
41+
kernel_bases = sorted(kernel_groups[kernel], key=lambda p: p.leetcode_id)
3442
lines.extend([f"## {kernel}", ""])
3543

36-
lines.extend([f"### 🎯 Base Template: {base.markdown_link(include_difficulty=False)}", ""])
37-
if base.solutions:
38-
notes = base.solutions[0].get("notes", "")
39-
if notes:
40-
lines.extend([notes, ""])
41-
42-
lines.extend(["### Derived Problems", ""])
43-
for derived_id in base.derived_problems:
44-
if derived_id in problems:
45-
lines.append(f"- {format_problem_entry(problems[derived_id], show_complexity=True)}")
46-
else:
47-
lines.append(f"- LeetCode {derived_id} *(metadata not yet added)*")
48-
49-
if not base.derived_problems:
50-
lines.append("- *(No derived problems listed)*")
51-
lines.append("")
44+
for base in kernel_bases:
45+
lines.extend([f"### 🎯 Base Template: {base.markdown_link(include_difficulty=False)}", ""])
46+
if base.solutions:
47+
notes = base.solutions[0].get("notes", "")
48+
if notes:
49+
lines.extend([notes, ""])
50+
51+
lines.extend(["### Derived Problems", ""])
52+
for derived_id in base.derived_problems:
53+
if derived_id in problems:
54+
lines.append(f"- {format_problem_entry(problems[derived_id], show_complexity=True)}")
55+
else:
56+
lines.append(f"- LeetCode {derived_id} *(metadata not yet added)*")
57+
58+
if not base.derived_problems:
59+
lines.append("- *(No derived problems listed)*")
60+
lines.append("")
5261

5362
return "\n".join(lines)
5463

0 commit comments

Comments
 (0)