summaryrefslogtreecommitdiffstats
path: root/day21/day21-1.js
diff options
context:
space:
mode:
authorGravatar Piotr Russ <piotr.russ@betvictor.com> 2020-12-24 12:54:45 +0100
committerGravatar Piotr Russ <piotr.russ@betvictor.com> 2020-12-24 12:54:45 +0100
commitda3b7eacf125f1569fa5c5b50b60941a65d5067f (patch)
tree1c17197062bd6dcb61b8f8a3a8f63d37569c68f0 /day21/day21-1.js
parent50fd0627cc74b72b48775e78271a11ab1bcd50dd (diff)
downloadadvent_of_code_2020-da3b7eacf125f1569fa5c5b50b60941a65d5067f.tar.gz
advent_of_code_2020-da3b7eacf125f1569fa5c5b50b60941a65d5067f.tar.bz2
advent_of_code_2020-da3b7eacf125f1569fa5c5b50b60941a65d5067f.zip
day21
Diffstat (limited to 'day21/day21-1.js')
-rw-r--r--day21/day21-1.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/day21/day21-1.js b/day21/day21-1.js
new file mode 100644
index 0000000..08ddc95
--- /dev/null
+++ b/day21/day21-1.js
@@ -0,0 +1,32 @@
+const data = require('./data')
+let arr = data
+ .split(/\n/g).filter(Boolean)
+ .map(l => l.replace(')','').split(' (contains '))
+ .map(l => [l[0].split(' '), l[1].split(', ')])
+
+const ingredients = {}
+const allergens = {}
+
+for (let i=0; i<arr.length; i++) {
+ for (let j=0; j<arr[i][0].length; j++) {
+ let ingredient = arr[i][0][j]
+ if (!ingredients[ingredient]) { ingredients[ingredient] = [] }
+ ingredients[ingredient].push(i)
+ }
+ for (let k=0; k<arr[i][1].length; k++) {
+ let allergen = arr[i][1][k]
+ if (!allergens[allergen]) { allergens[allergen] = [] }
+ allergens[allergen].push(i)
+ }
+}
+
+Object.values(allergens).forEach(allergen => {
+ Object.entries(ingredients).forEach(ingredient => {
+ if(allergen.every(a => ingredient[1].includes(a))) {
+ delete ingredients[ingredient[0]]
+ }
+ })
+})
+
+const answer = Object.values(ingredients).map(i => i.length).reduce((a, b) => a + b, 0)
+console.log('Answer: ', answer)