Files
cpp-flashcards/leetcode/scaffold-notes.mjs
T
tomatocream 956c2b2c88 Add TODO checkboxes to Python/C++ sub-headings
- roadmap.org: *** TODO Python and *** TODO C++ with [/] cookie
  on each problem heading for [0/2] progress tracking
- Note files now have TODO Approach, TODO Python, TODO C++
  sections for structured problem solving
2026-06-01 02:39:53 +08:00

65 lines
1.5 KiB
JavaScript

import { readFileSync, writeFileSync, existsSync } from "node:fs";
import { join, dirname } from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = dirname(fileURLToPath(import.meta.url));
const roadmap = readFileSync(join(__dirname, "out/roadmap.org"), "utf8");
const dsaDir = join(__dirname, "../org/cpp/dsa");
const topicSlug = (name) =>
name
.toLowerCase()
.replace(/[^a-z0-9]+/g, "-")
.replace(/(^-|-$)/g, "");
let currentTopic = "";
let count = 0;
for (const line of roadmap.split("\n")) {
const topicMatch = line.match(/^\* TODO (.+?) \[/);
if (topicMatch) {
currentTopic = topicSlug(topicMatch[1]);
continue;
}
const problemMatch = line.match(
/^\*\* TODO (\d+)\. (.+?) :(easy|medium|hard): \[\/\]$/
);
if (problemMatch) {
const [, num, name, diff] = problemMatch;
const slug = name
.toLowerCase()
.replace(/[^a-z0-9]+/g, "-")
.replace(/(^-|-$)/g, "");
const code = `${num}-${slug}`;
const filePath = join(dsaDir, currentTopic, `${code}.org`);
if (existsSync(filePath)) continue;
const relPath = `../../../../leetcode/out/roadmap.org::*${num}. ${name}`;
const content = `* TODO ${num}. ${name} :${diff}:
:PROPERTIES:
:NEETCODE: [[${relPath}][Roadmap]]
:END:
** TODO Approach
Write your approach here.
** TODO Python
#+begin_src python
#+end_src
** TODO C++
#+begin_src cpp
#+end_src
`;
writeFileSync(filePath, content);
count++;
}
}
console.log(`Created ${count} note files`);