Files
cpp-flashcards/leetcode/AGENTS.md
T
tomatocream eabb433ec6 Add solution notes scaffold and sub-heading format
- roadmap.org: problems now have *** Python and *** C++ sub-headings,
  plus Notes: links to per-problem org files
- scaffold-notes.mjs: creates 199 note files in org/cpp/dsa/<topic>/
  with backlinks to roadmap.org
- 18 topic folders under org/cpp/dsa/ for NeetCode 150 problems
- Updated AGENTS.md with new conventions and workflow
2026-06-01 02:33:30 +08:00

3.4 KiB

AGENTS.md — leetcode/

What This Is

An idempotent extractor that pulls the NeetCode roadmap dependency graph and problem list from the live site (neetcode.io). Outputs structured JSON, Graphviz DOT, and Emacs org-mode files.

How It Works

NeetCode is an Angular SPA. The data we need is split across lazy-loaded JS chunks:

  1. HTML (/roadmap) — contains the <script> tags pointing to the runtime and main bundle filenames (content-hashed).
  2. Runtime JS — maps chunk IDs to content hashes: 7669:"fc6133d290d8d0ad".
  3. Main bundle (main.*.js) — contains all ~965 problems with fields: problem, pattern, link, difficulty, code, flags (neetcode150, blind75, neetcode250, premium).
  4. Chunk 7669 — contains the graph nodes (id, name, parentId[]) and course-to-topic mappings. The parentId array is the edge list — each entry points to a prerequisite topic.

The script (extract.mjs) resolves the hashed filenames at runtime, downloads the chunks, and regex-extracts the data structures.

Running

node extract.mjs                  # writes to ./out/
node extract.mjs --stdout         # prints full JSON to stdout
node extract.mjs --cache /tmp/nc  # custom cache directory

Downloads are cached in .cache/ (gitignored). Re-runs are instant and produce byte-identical output.

Output Files

File Contents
out/roadmap.json Full data: graph, all 965 problems, courses
out/roadmap-neetcode150.json NeetCode 150 only (199 problems)
out/roadmap.dot Graphviz DOT (render with dot -Tsvg)
out/roadmap.org Org-mode with TODO checklists, Python/C++ links
neetcode-roadmap-graph.json Standalone edge list (manual copy)
neetcode-roadmap.dot Standalone DOT (manual copy)

The Dependency Graph

18 topics, 21 edges, topologically ordered:

Arrays & Hashing
├── Two Pointers
│   ├── Sliding Window
│   ├── Linked List → Trees
│   └── Binary Search → Trees
│       ├── Tries
│       ├── Heap / Priority Queue → Intervals, Greedy, Advanced Graphs
│       └── Backtracking
│           ├── Graphs → Advanced Graphs, 2-D DP, Math & Geometry
│           └── 1-D Dynamic Programming → 2-D DP, Bit Manipulation
└── Stack

Org-Mode Format

Each topic is a * TODO heading with a [/] cookie for progress. Problems are ** TODO sub-headings with difficulty tags (:easy:, :medium:, :hard:). Python and C++ solution links are *** sub-headings under each problem. Each problem also links to a notes file at org/cpp/dsa/<topic>/<problem>.org for personal solutions and flashcards.

Notes Files

org/cpp/dsa/<topic>/<code>.org — one per NeetCode 150 problem (199 total). Scaffolded by scaffold-notes.mjs. Template:

* TODO 0217. Contains Duplicate :easy:
:PROPERTIES:
:NEETCODE: [[../../../../leetcode/out/roadmap.org::*0217. Contains Duplicate][Roadmap]]
:END:

#+begin_src cpp

#+end_src

Run node scaffold-notes.mjs to create missing note files (skips existing).

Updating

Just re-run node extract.mjs. It fetches fresh data from the site (cached locally). If NeetCode changes their chunk structure, the regexes in extractGraphNodes() and extractProblems() will need updating.

Dependencies

None. Uses only Node.js built-ins (fs, path, url, fetch). Requires Node 18+ for native fetch.