parse = (input) => {
const dirTree = {};
const dirStack = [dirTree];
const lines = input.split("\n");
let cwd = dirTree;
for (let i = 0; i < lines.length; i++) {
const tokens = lines[i].split(" ");
if (tokens[1] === "cd") {
if (tokens[2] === "/") {
cwd = dirTree;
dirStack.splice(0);
dirStack.push(dirTree);
} else if (tokens[2] === "..") {
cwd = dirStack.pop();
} else {
dirStack.push(cwd);
cwd = cwd[tokens[2]];
}
} else if (tokens[1] === "ls") {
i++;
while (i < lines.length && lines[i][0] !== "$") {
const fileTokens = lines[i].split(" ");
const name = fileTokens[1];
cwd[name] = fileTokens[0] === "dir" ? {} : parseInt(fileTokens[0]);
i++;
}
if (i < lines.length && lines[i][0] === "$") i--;
}
}
return dirTree;
}