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: #+begin_src cpp #+end_src `; writeFileSync(filePath, content); count++; } } console.log(`Created ${count} note files`);