Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Advent of Code 2024 - Day 11
- const fs = require("fs")
- const input = fs.readFileSync(__dirname + (process.argv.includes("--test") ? "/test.txt" : "/input.txt"), "utf8")
- const data = input.split(" ").map(Number)
- function evolveStones(initialStones, blinks) {
- let stoneMap = new Map()
- const cache = new Map()
- for (const stone of initialStones) {
- stoneMap.set(stone, (stoneMap.get(stone) || 0) + 1)
- }
- for (let blink = 0; blink < blinks; blink++) {
- const newStoneMap = new Map()
- for (const [stone, count] of stoneMap.entries()) {
- let transformed
- if (cache.has(stone)) {
- transformed = cache.get(stone)
- } else {
- if (stone === 0) {
- transformed = [1]
- } else if (stone.toString().length % 2 === 0) {
- let str = stone.toString()
- const mid = str.length / 2
- const left = +str.slice(0, mid)
- const right = +str.slice(mid)
- transformed = [left, right]
- } else transformed = [stone * 2024]
- cache.set(stone, transformed)
- }
- for (const newStone of transformed) {
- newStoneMap.set(newStone, (newStoneMap.get(newStone) || 0) + count)
- }
- }
- stoneMap = new Map(newStoneMap)
- }
- return Array.from(stoneMap.values()).reduce((sum, count) => sum + count, 0)
- }
- console.time("Part 1 Time")
- console.log("Part 1:", evolveStones(data, 25))
- console.timeEnd("Part 1 Time")
- console.time("Part 2 Time")
- console.log("Part 2:", evolveStones(data, 75))
- console.timeEnd("Part 2 Time")
Advertisement
Add Comment
Please, Sign In to add comment