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 input = fs.readFileSync(__dirname + "/data.txt", 'utf8').split(eol + eol)
- function solve(runs, p1 = true) {
- let supermod = 1
- let monkeys = input.map(item => {
- let data = item.split(eol)
- supermod *= +data[3].replace(/[^\d.]/g, '')
- return {
- count: 0,
- balls: data[1].split(' Starting items: ')[1].split(', ').map(Number),
- op: eval("old => " + data[2].split(" Operation: new = ")[1]),
- worry: +data[3].replace(/[^\d.]/g, ''),
- worryTrue: +data[4].replace(/[^\d.]/g, ''),
- worryFalse: +data[5].replace(/[^\d.]/g, '')
- }
- })
- while (runs--) {
- for (const monkey of monkeys) {
- while (monkey.balls.length) {
- let old = monkey.balls.pop()
- let worry = monkey.op(old)
- if (p1) worry = Math.floor(worry / 3)
- else worry %= supermod
- let throwTo = worry % monkey.worry == 0 ? monkey.worryTrue : monkey.worryFalse
- monkeys[throwTo].balls.push(worry)
- monkey.count++
- }
- }
- }
- monkeys.sort((a, b) => b.count - a.count)
- return monkeys[0].count * monkeys[1].count
- }
- part1 = solve(20)
- part2 = solve(10000, false)
- 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