summaryrefslogtreecommitdiff
path: root/day-06
diff options
context:
space:
mode:
Diffstat (limited to 'day-06')
-rw-r--r--day-06/.gitkeep0
-rw-r--r--day-06/package.json3
-rw-r--r--day-06/sol.js115
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();