44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
function part1(data) {
|
|
const polymer = data.split("");
|
|
const removeChar = ""; // No removal
|
|
const stack = collapsePloymer(polymer, removeChar);
|
|
return stack.length;
|
|
}
|
|
|
|
function collapsePloymer(ploymerChars, removeChar) {
|
|
const stack = [];
|
|
for (let i = 0; i < ploymerChars.length; i++) {
|
|
const char = ploymerChars[i];
|
|
if (char.toLowerCase() === removeChar.toLowerCase()) {
|
|
continue;
|
|
}
|
|
const last = stack.pop();
|
|
if (!last) {
|
|
stack.push(char);
|
|
continue;
|
|
}
|
|
if (last.toLowerCase() === char.toLowerCase() && last !== char) {
|
|
continue;
|
|
}
|
|
stack.push(last);
|
|
stack.push(char);
|
|
}
|
|
return stack;
|
|
}
|
|
|
|
function part2(data) {
|
|
const polymer = data.split("");
|
|
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
|
|
const collapsedPolymers = alphabet.map(letter =>
|
|
collapsePloymer(polymer, letter)
|
|
);
|
|
const shortestCollapse = collapsedPolymers.reduce((longest, curr) =>
|
|
longest.length < curr.length ? longest : curr
|
|
);
|
|
return shortestCollapse.length;
|
|
}
|
|
|
|
module.exports = {
|
|
part1: part1,
|
|
part2: part2
|
|
}; |