Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const fs = require("fs")
- const performance = require("perf_hooks").performance
- const eol = require("os").EOL
- let startTime = performance.now()
- let part1 = (part2 = 0)
- let monkeys = []
- let monkeys2 = []
- fs.readFileSync(__dirname + "/data.txt", "utf8")
- .split(eol)
- .map((a) => {
- let [name, e] = a.split(": ")
- let num, m1, m2, op
- if (isNaN(e)) {
- ;[m1, op, m2] = e.split(" ")
- } else num = +e
- monkeys[name] = { name, num, m1, op, m2 }
- monkeys2[name] = { name, num, m1, op, m2 }
- })
- function resolveMonkeys(monkey) {
- let m = monkeys[monkey]
- if (!isNaN(m.num)) return m.num
- m.m1 = resolveMonkeys(m.m1)
- m.m2 = resolveMonkeys(m.m2)
- if (m.op == "+") m.num = m.m1 + m.m2
- if (m.op == "-") m.num = m.m1 - m.m2
- if (m.op == "*") m.num = m.m1 * m.m2
- if (m.op == "/") m.num = m.m1 / m.m2
- return m.num
- }
- function createMonkeyEquation(monkey) {
- let m = monkeys2[monkey]
- if (!isNaN(m.num)) return m.num
- if (m.num == "y") return m.num
- m.m1 = createMonkeyEquation(m.m1)
- m.m2 = createMonkeyEquation(m.m2)
- return "(" + m.m1 + ")" + m.op + "(" + m.m2 + ")"
- }
- part1 = resolveMonkeys("root")
- monkeys2.root.op = "="
- monkeys2.humn.num = "y"
- part2 = createMonkeyEquation("root")
- // I solved part 2 by solving the resulting equation online :D
- let time = performance.now() - startTime
- console.log(`Part 1: ${part1}\nPart 2: ${part2}\nTimer: ${time} ms`)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement