function parse(input) {
const [stackText, moveText] = input
.split("\n\n")
.map((block) => block.split("\n"));
const numStacks = Number(
stackText[stackText.length - 1].split(" ").reverse()[1]
);
const stacks = new Array(numStacks).fill().map(() => []);
for (let row = 0; row < stackText.length - 1; row++) {
for (let col = 0; col < numStacks; col++) {
const crate = stackText[row][col * 4 + 1];
if (crate !== " ") {
stacks[col].push(crate);
}
}
}
const moves = moveText
.map((l) => l.split(" "))
.map((tokens) => ({
moveSize: Number(tokens[1]),
from: Number(tokens[3]) - 1,
to: Number(tokens[5] - 1)
}));
return [stacks, moves];
}