2018-12-05 20:26:42 +00:00
|
|
|
let fs = require("fs");
|
|
|
|
|
|
|
|
let input = fs.readFileSync("inputs.txt", "utf8").split('');
|
|
|
|
|
|
|
|
function swapCase(c) {
|
|
|
|
return c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase();
|
|
|
|
}
|
|
|
|
|
|
|
|
function collapsePolymer(polymer) {
|
2018-12-05 20:32:56 +00:00
|
|
|
let i = 0;
|
|
|
|
while(i < polymer.length - 1) {
|
|
|
|
if (polymer[i] === swapCase(polymer[i + 1])) {
|
2018-12-05 20:26:42 +00:00
|
|
|
polymer.splice(i, 2);
|
|
|
|
i = Math.max(-1, i - 2);
|
|
|
|
}
|
2018-12-05 20:32:56 +00:00
|
|
|
|
|
|
|
i++;
|
2018-12-05 20:26:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return polymer.length;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let shortest = Math.min(...
|
|
|
|
'abcdefghijklmnopqrstuvwxyz'
|
|
|
|
.split('')
|
|
|
|
.map(
|
|
|
|
x => collapsePolymer(
|
|
|
|
input.filter(
|
|
|
|
y => y.toUpperCase() !== x.toUpperCase()
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
console.log(`[Part 1] Polymer length: ${ collapsePolymer(input) }`);
|
|
|
|
console.log(`[Part 2] Shortest polymer length: ${ shortest }`);
|