Advertisement
mosredna

AoC 2022 day 21

Dec 21st, 2022
960
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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 monkeys = []
  8. let monkeys2 = []
  9. fs.readFileSync(__dirname + "/data.txt", "utf8")
  10.     .split(eol)
  11.     .map((a) => {
  12.         let [name, e] = a.split(": ")
  13.         let num, m1, m2, op
  14.         if (isNaN(e)) {
  15.             ;[m1, op, m2] = e.split(" ")
  16.         } else num = +e
  17.  
  18.         monkeys[name] = { name, num, m1, op, m2 }
  19.         monkeys2[name] = { name, num, m1, op, m2 }
  20.     })
  21.  
  22. function resolveMonkeys(monkey) {
  23.     let m = monkeys[monkey]
  24.     if (!isNaN(m.num)) return m.num
  25.     m.m1 = resolveMonkeys(m.m1)
  26.     m.m2 = resolveMonkeys(m.m2)
  27.     if (m.op == "+") m.num = m.m1 + m.m2
  28.     if (m.op == "-") m.num = m.m1 - m.m2
  29.     if (m.op == "*") m.num = m.m1 * m.m2
  30.     if (m.op == "/") m.num = m.m1 / m.m2
  31.     return m.num
  32. }
  33.  
  34. function createMonkeyEquation(monkey) {
  35.     let m = monkeys2[monkey]
  36.     if (!isNaN(m.num)) return m.num
  37.     if (m.num == "y") return m.num
  38.     m.m1 = createMonkeyEquation(m.m1)
  39.     m.m2 = createMonkeyEquation(m.m2)
  40.     return "(" + m.m1 + ")" + m.op + "(" + m.m2 + ")"
  41. }
  42.  
  43. part1 = resolveMonkeys("root")
  44. monkeys2.root.op = "="
  45. monkeys2.humn.num = "y"
  46. part2 = createMonkeyEquation("root")
  47. // I solved part 2 by solving the resulting equation online :D
  48. let time = performance.now() - startTime
  49. console.log(`Part 1: ${part1}\nPart 2: ${part2}\nTimer: ${time} ms`)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement