mosredna

AoC 2024 day 11

Dec 11th, 2024
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 1.72 KB | Source Code | 0 0
  1. // Advent of Code 2024 - Day 11
  2. const fs = require("fs")
  3.  
  4. const input = fs.readFileSync(__dirname + (process.argv.includes("--test") ? "/test.txt" : "/input.txt"), "utf8")
  5. const data = input.split(" ").map(Number)
  6.  
  7. function evolveStones(initialStones, blinks) {
  8.     let stoneMap = new Map()
  9.     const cache = new Map()
  10.  
  11.     for (const stone of initialStones) {
  12.         stoneMap.set(stone, (stoneMap.get(stone) || 0) + 1)
  13.     }
  14.  
  15.     for (let blink = 0; blink < blinks; blink++) {
  16.         const newStoneMap = new Map()
  17.  
  18.         for (const [stone, count] of stoneMap.entries()) {
  19.             let transformed
  20.  
  21.             if (cache.has(stone)) {
  22.                 transformed = cache.get(stone)
  23.             } else {
  24.                 if (stone === 0) {
  25.                     transformed = [1]
  26.                 } else if (stone.toString().length % 2 === 0) {
  27.                     let str = stone.toString()
  28.                     const mid = str.length / 2
  29.                     const left = +str.slice(0, mid)
  30.                     const right = +str.slice(mid)
  31.                     transformed = [left, right]
  32.                 } else transformed = [stone * 2024]
  33.  
  34.                 cache.set(stone, transformed)
  35.             }
  36.  
  37.             for (const newStone of transformed) {
  38.                 newStoneMap.set(newStone, (newStoneMap.get(newStone) || 0) + count)
  39.             }
  40.         }
  41.  
  42.         stoneMap = new Map(newStoneMap)
  43.     }
  44.  
  45.     return Array.from(stoneMap.values()).reduce((sum, count) => sum + count, 0)
  46. }
  47.  
  48. console.time("Part 1 Time")
  49. console.log("Part 1:", evolveStones(data, 25))
  50. console.timeEnd("Part 1 Time")
  51.  
  52. console.time("Part 2 Time")
  53. console.log("Part 2:", evolveStones(data, 75))
  54. console.timeEnd("Part 2 Time")
  55.  
Advertisement
Add Comment
Please, Sign In to add comment