summaryrefslogtreecommitdiffstats
path: root/day14/day14-1.js
blob: 6e72909cc93ea07e87a650661a75d4f811d8d296 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const data = require('./data')
const splitted = data
  .split(/mask = /g)
  .filter(d => d !== '\n')
  .map(d => d.split(/\n/g))
  .map(d => d.map((a, i) => (i > 0 ? a.match(/\d+/g) : a)).filter(a => a))
  .map(d => d.map((a, i) => (i > 0 ? a.map((b, i) => i > 0 ? parseInt(b).toString(2).padStart(36, '0') : parseInt(b)) : a)))

let mem = []
splitted.forEach(s => {
  const mask = s[0]
  const applyMask = (str) => (
    str.split('').map((v, i) => (mask[i] !== 'X' ? mask[i] : v)).join('')
  )

  s.forEach((m, i) => (i > 0 && (mem[m[0]] = parseInt(applyMask(m[1]), 2))))
})

console.log('Answer: ', mem.reduce((a, b) => a + b, 0))