diff options
Diffstat (limited to 'day-06')
-rw-r--r-- | day-06/.gitkeep | 0 | ||||
-rw-r--r-- | day-06/package.json | 3 | ||||
-rw-r--r-- | day-06/sol.js | 115 |
3 files changed, 0 insertions, 118 deletions
diff --git a/day-06/.gitkeep b/day-06/.gitkeep deleted file mode 100644 index e69de29..0000000 --- a/day-06/.gitkeep +++ /dev/null diff --git a/day-06/package.json b/day-06/package.json deleted file mode 100644 index 3dbc1ca..0000000 --- a/day-06/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/day-06/sol.js b/day-06/sol.js deleted file mode 100644 index 28b7b0d..0000000 --- a/day-06/sol.js +++ /dev/null @@ -1,115 +0,0 @@ -import input from "fs"; - -class File { - constructor(name, size, parent) { - this.name = name; - this.fileSize = size; - this.parent = parent; - } - - size() { - return this.fileSize; - } -} - -class Directory { - constructor(name, parent) { - this.children = []; - this.name = name; - this.parent = parent; - } - - add(child) { - this.children.push(child); - } - - size() { - return this.children.reduce((acc, child) => acc + child.size(), 0); - } - - searchDirectoresOfSizePredicate(sizeP) { - const dirs = []; - for (const child of this.children) { - if (child instanceof Directory) { - if (sizeP(child.size())) { - dirs.push(child); - } - dirs.push(...child.searchDirectoresOfSizePredicate(sizeP)); - } - } - return dirs; - } -} - -class OS { - constructor() { - this.root = new Directory("/", null); - - this.current = this.root; - } - - cd(path) { - if (path === "/") { - this.current = this.root; - } else if (path === ".." && this.current.parent) { - this.current = this.current.parent; - } else { - this.current = this.current.children.find((child) => child.name === path); - } - } - - printFs() { - const print = (dir, depth) => { - for (const child of dir.children) { - console.log(" ".repeat(depth) + child.name); - if (child instanceof Directory) { - print(child, depth + 1); - } - } - }; - - print(this.root, 0); - } -} - -const main = () => { - const os = new OS(); - const lines = input.readFileSync("input", "utf8").split("\n"); - - let currentCommand = null; - for (const line of lines) { - if (line.startsWith("$")) { - const [command, path] = line.split(" ").splice(1); - if (command == "cd") os.cd(path); - currentCommand = command; - } else if (currentCommand == "ls") { - const [dirOrSize, name] = line.split(" "); - if (dirOrSize === "dir") { - const dir = new Directory(name, os.current); - os.current.add(dir); - } else { - const file = new File(name, parseInt(dirOrSize), os.current); - os.current.add(file); - } - } - } - - //os.printFs(); - - console.log( - os.root - .searchDirectoresOfSizePredicate((size) => size <= 100000) - .reduce((a, x) => a + x.size(), 0) - ); - - const rootSize = os.root.size(); - const freeSpace = 70000000 - rootSize; - console.log( - [...os.root.searchDirectoresOfSizePredicate(() => true), os.root] - .map((x) => x.size()) - .filter((x) => freeSpace + x >= 30000000) - .reduce((a, x) => Math.min(a, x), Infinity) - ); -}; - -main(); |