diff options
author | 2020-12-18 12:35:42 +0100 | |
---|---|---|
committer | 2020-12-18 12:35:42 +0100 | |
commit | ad8e0fe91fba37e61a913cc6dd67028c26cac373 (patch) | |
tree | cb0bdf7cb9a342421e5bf54ab4c74d4e9a16a31d /day18/day18-2.js | |
parent | 8fcddb1917ffcfbeb9b091536352e609f8e709f3 (diff) | |
download | advent_of_code_2020-ad8e0fe91fba37e61a913cc6dd67028c26cac373.tar.gz advent_of_code_2020-ad8e0fe91fba37e61a913cc6dd67028c26cac373.tar.bz2 advent_of_code_2020-ad8e0fe91fba37e61a913cc6dd67028c26cac373.zip |
day18
Diffstat (limited to 'day18/day18-2.js')
-rw-r--r-- | day18/day18-2.js | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/day18/day18-2.js b/day18/day18-2.js new file mode 100644 index 0000000..d6f6e58 --- /dev/null +++ b/day18/day18-2.js @@ -0,0 +1,29 @@ +const data = require('./data') +const lines = data.split(/\n/g).filter(Boolean) + +const ev = (str) => { + let spl = str.split(' ') + while(spl.length) { + spl = [eval(spl.slice(0, 3).join(''))].concat(spl.slice(3)) + } + return spl[0] +} + +const evPlus = (str) => { + while (/\+/.test(str)) { + str = str.replace(/(\d+) \+ (\d+)/g, (match, n1, n2) => parseInt(n1) + parseInt(n2)) + } + return eval(str) +} + +const evPar = (str, ev) => { + while(/\(/.test(str)) { + str = str.replace(/\(([^()]+)\)/g, (match, par) => ev(par)) + } + return ev(str) +} + +let sum = 0 +lines.forEach(l => sum += evPar(l, evPlus)) +console.log('Answer: ', sum) + |