summaryrefslogtreecommitdiffstats
path: root/day18/day18-1.js
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-12-18 12:35:42 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-12-18 12:35:42 +0100
commitad8e0fe91fba37e61a913cc6dd67028c26cac373 (patch)
treecb0bdf7cb9a342421e5bf54ab4c74d4e9a16a31d /day18/day18-1.js
parent8fcddb1917ffcfbeb9b091536352e609f8e709f3 (diff)
downloadadvent_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-1.js')
-rw-r--r--day18/day18-1.js22
1 files changed, 22 insertions, 0 deletions
diff --git a/day18/day18-1.js b/day18/day18-1.js
new file mode 100644
index 0000000..992da27
--- /dev/null
+++ b/day18/day18-1.js
@@ -0,0 +1,22 @@
+const data = require('./data')
+const lines = data.split(/\n/g).filter(Boolean)
+
+const ev = (str) => {
+ let spl = str.split(' ')
+ while(spl.length > 1) {
+ spl = [eval(spl.slice(0, 3).join(''))].concat(spl.slice(3))
+ }
+ return spl[0]
+}
+
+const evPar = (str) => {
+ while(/\(/.test(str)) {
+ str = str.replace(/\(([^()]+)\)/g, (match, par) => ev(par))
+ }
+ return ev(str)
+}
+
+let sum = 0
+lines.forEach(l => sum += evPar(l))
+console.log('Answer: ', sum)
+