mosredna

AoC 2023 day 2

Dec 2nd, 2023 (edited)
691
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 1.25 KB | Source Code | 0 0
  1. const fs = require("fs")
  2. const performance = require("perf_hooks").performance
  3. const eol = require("os").EOL
  4.  
  5. let startTime = performance.now()
  6. let part1 = (part2 = 0)
  7. let input = fs.readFileSync(__dirname + "/data.txt", "utf8").split(eol)
  8.  
  9. let games = input.map((item) => {
  10.     return item
  11.         .split(": ")[1]
  12.         .split("; ")
  13.         .map((dices) => {
  14.             let d = {}
  15.             dices.split(", ").map((turn) => {
  16.                 let data = turn.split(" ")
  17.                 d[data[1]] = ~~data[0]
  18.             })
  19.             return d
  20.         })
  21. })
  22.  
  23. let rules = { red: 12, green: 13, blue: 14 }
  24. for (let i = 0; i < games.length; i++) {
  25.     const game = games[i]
  26.     let posible = true
  27.     let dices = { red: 1, green: 1, blue: 1 }
  28.     for (const turn of game) {
  29.         for (const dice in turn) {
  30.             if (rules[dice] < turn[dice]) {
  31.                 posible = false
  32.             }
  33.             if (dices[dice] < turn[dice]) {
  34.                 dices[dice] = turn[dice]
  35.             }
  36.         }
  37.     }
  38.     if (posible) part1 += i + 1
  39.     part2 += Object.values(dices).reduce((acc, value) => acc * value, 1)
  40. }
  41.  
  42. let time = performance.now() - startTime
  43. console.log(`Part 1: ${part1}\nPart 2: ${part2}\nTimer: ${time} ms`)
Advertisement
Add Comment
Please, Sign In to add comment