Advertisement
mosredna

AoC 2022 day 11

Dec 11th, 2022 (edited)
571
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 1.55 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 + eol)
  8.  
  9. function solve(runs, p1 = true) {
  10.     let supermod = 1
  11.     let monkeys = input.map(item => {
  12.         let data = item.split(eol)
  13.         supermod *= +data[3].replace(/[^\d.]/g, '')
  14.         return {
  15.             count: 0,
  16.             balls: data[1].split('  Starting items: ')[1].split(', ').map(Number),
  17.             op: eval("old => " + data[2].split("  Operation: new = ")[1]),
  18.             worry: +data[3].replace(/[^\d.]/g, ''),
  19.             worryTrue: +data[4].replace(/[^\d.]/g, ''),
  20.             worryFalse: +data[5].replace(/[^\d.]/g, '')
  21.         }
  22.     })
  23.     while (runs--) {
  24.         for (const monkey of monkeys) {
  25.             while (monkey.balls.length) {
  26.                 let old = monkey.balls.pop()
  27.                 let worry = monkey.op(old)
  28.                 if (p1) worry = Math.floor(worry / 3)
  29.                 else worry %= supermod
  30.                 let throwTo = worry % monkey.worry == 0 ? monkey.worryTrue : monkey.worryFalse
  31.                 monkeys[throwTo].balls.push(worry)
  32.                 monkey.count++
  33.             }
  34.         }
  35.     }
  36.     monkeys.sort((a, b) => b.count - a.count)
  37.     return monkeys[0].count * monkeys[1].count
  38. }
  39. part1 = solve(20)
  40. part2 = solve(10000, false)
  41. let time = performance.now() - startTime
  42. console.log(`Part 1: ${part1}\nPart 2: ${part2}\nTimer: ${time} ms`)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement