Reimplemeted day 7 as a code exercise
This commit is contained in:
parent
0e77c0ae39
commit
04b6452f21
1 changed files with 48 additions and 0 deletions
48
2022/7/take-2.js
Normal file
48
2022/7/take-2.js
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
// I wanted to try this one again with a different approach just as an exercise
|
||||||
|
// in a more complex, but faster way implementing the solutions
|
||||||
|
|
||||||
|
const fs = require('fs/promises');
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
const input = (await fs.readFile("./input.txt", 'utf8')).split("\n");;
|
||||||
|
|
||||||
|
const path = [];
|
||||||
|
|
||||||
|
const dirsMap = {};
|
||||||
|
|
||||||
|
for (const line of input) {
|
||||||
|
console.log("PATH ", path);
|
||||||
|
if(line === "$ cd /") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(line === "$ cd ..") {
|
||||||
|
path.pop();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const cdCmd = line.match(/\$ cd (.+)/);
|
||||||
|
if(cdCmd) {
|
||||||
|
const [_, cdDir] = cdCmd;
|
||||||
|
path.push(cdDir);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const file = line.match(/^\d+/);
|
||||||
|
if(file) {
|
||||||
|
const [size] = file;
|
||||||
|
updateDirsOnPath(dirsMap, ["root", ...path], parseFloat(size));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("ANSWER: ", sum(Object.values(dirsMap).filter(x => x <= 100000)))
|
||||||
|
|
||||||
|
console.log("ANSWER 2: ", Object.values(dirsMap).reduce((best, cur) => cur > dirsMap.root - 40000000 && cur < best ? cur : best, Infinity));
|
||||||
|
})();
|
||||||
|
|
||||||
|
const updateDirsOnPath = (dirsMap, path, size) => {
|
||||||
|
if(!path.length) return;
|
||||||
|
const pwd = path.join("/");
|
||||||
|
dirsMap[path] = (dirsMap[path] || 0) + size;
|
||||||
|
updateDirsOnPath(dirsMap, path.slice(0, -1), size);
|
||||||
|
}
|
||||||
|
|
||||||
|
const sum = (arr) => arr.reduce((total, num) => total+num, 0);
|
Loading…
Reference in a new issue