Advertisement
horvathm

Untitled

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