parseCrates = (input) => {
const lines = input.split("\n");
const stackLine = lines[lines.length - 1];
const stackNames = stackLine.trim().split(/\s+/);
const stacks = stackNames.reduce((obj, name) => {
obj[name] = [];
return obj;
}, {});
const stackPositions = stackNames.reduce((obj, name) => {
obj[name] = stackLine.indexOf(name);
return obj;
}, {});
for (let i = lines.length - 1; i--; i >= 0) {
stackNames.forEach((n) => {
if (lines[i][stackPositions[n]] !== " ")
stacks[n].push(lines[i][stackPositions[n]]);
});
}
return stacks;
}