AOC Solutions

For a description of this problem, please check the Advent of Code website.

Example Input:

125 17

Part 1 Solution:

const fs = require('fs');
let stones = fs.readFileSync('./example-input.txt', 'utf8').trim().split(' ').map(Number);
function blink() {
let newStones=[]
stones.forEach(stone => {
if(stone === 0) {
newStones.push(1)
} else if(`${stone}`.length % 2 === 0) {
const middle = `${stone}`.length / 2
newStones.push(Number((`${stone}`.slice(0, middle))))
newStones.push(Number((`${stone}`.slice(middle))))
} else{
newStones.push(stone * 2024)
}
})
stones = newStones
}
for(i = 0; i < 25; i++) {
blink()
}
console.log(stones.length);

Part 2 Solution:

const fs = require('fs');
let stones = fs.readFileSync('./example-input.txt', 'utf8').trim().split(' ').map(Number)
.reduce((map, stone) => {
map.set(stone, (map.get(stone) || 0) + 1);
return map;
}, new Map());
function blink() {
const newStones = new Map();
stones.forEach((count, stone) => {
if (stone === 0) {
newStones.set(1, (newStones.get(1) || 0) + count);
} else if (`${stone}`.length % 2 === 0) {
const middle = `${stone}`.length / 2;
const part1 = Number(`${stone}`.slice(0, middle));
const part2 = Number(`${stone}`.slice(middle));
newStones.set(part1, (newStones.get(part1) || 0) + count);
newStones.set(part2, (newStones.get(part2) || 0) + count);
} else {
const newValue = stone * 2024;
newStones.set(newValue, (newStones.get(newValue) || 0) + count);
}
});
stones = newStones;
}
for (let i = 0; i < 75; i++) {
blink();
}
let totalStones = 0;
stones.forEach(count => {
totalStones += count;
});
console.log(`Total number of stones: ${totalStones}`);