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)
- const data = fs.readFileSync(__dirname + "/data.txt", "utf8")
- function compare(left, right) {
- let leftIsNum = typeof left == "number"
- let rightIsNum = typeof right == "number"
- if (leftIsNum && rightIsNum) return left - right
- if (leftIsNum) left = [left]
- else if (rightIsNum) right = [right]
- for (let i = 0; i < left.length; i++) {
- if (!right[i]) return 1
- const c = compare(left[i], right[i])
- if (c != 0) return c
- }
- return left.length == right.length ? 0 : -1
- }
- let input1 = data.split(eol + eol).map((a) => a.split(eol).map(JSON.parse))
- input1.forEach((item, i) => {
- if (compare(...item) <= 0) part1 += i + 1
- })
- let dividers = [[[2]], [[6]]]
- let input2 = data
- .split(eol + eol)
- .map((a) => a.split(eol).map(JSON.parse))
- .flat()
- .concat(dividers)
- .sort(compare)
- part2 = dividers.map((d) => input2.indexOf(d) + 1).reduce((acc, n) => acc * n)
- 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