horvathm

AoC Day 16, pure functional JavaScript

Dec 16th, 2020 (edited)
354
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. console.log((([rules, your, tickets]) => Array(rules.length).fill()
  2.     .map((_, i) => ({ i, fs: rules
  3.         .filter(r => tickets.filter(t => t.every(n => rules.some(r =>
  4.             (n >= r.r1[0] && n <= r.r1[1]) ||
  5.             (n >= r.r2[0] && n <= r.r2[1])
  6.         ))).every(t =>
  7.             (t[i] >= r.r1[0] && t[i] <= r.r1[1]) ||
  8.             (t[i] >= r.r2[0] && t[i] <= r.r2[1])
  9.         ))
  10.         .map(r => r.n)
  11.     }))
  12.     .sort((a, b) => a.fs.length - b.fs.length)
  13.     .reduce((p, c) => [...p, {
  14.         i: c.i,
  15.         f: c.fs.filter(f => p.every(i => f !== i.f))[0]
  16.     }], [])
  17.     .map(({ i, f }) => /^departure/.test(f) ? your[i] : 1)
  18.     .reduce((p, c) => p * c, 1)
  19. )((([rds, yds, nds]) => [
  20.     rds.split('\n').map(rd =>
  21.         (([_, n, r1f, r1t, r2f, r2t]) => ({
  22.             n,
  23.             r1: [parseInt(r1f, 10), parseInt(r1t, 10)],
  24.             r2: [parseInt(r2f, 10), parseInt(r2t, 10)]
  25.         }))(rd.match(/([a-z ]+): (\d+)-(\d+) or (\d+)-(\d+)/))
  26.     ),
  27.     yds.split('\n')[1].split(',').map(s => parseInt(s, 10)),
  28.     nds.split('\n').slice(1).map(r => r.split(',').map(s => parseInt(s, 10)))
  29. ])(require('fs').readFileSync('input', 'utf8').trim().split('\n\n'))));
  30.  
Add Comment
Please, Sign In to add comment