diff options
author | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2020-12-25 15:48:58 +0100 |
---|---|---|
committer | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2020-12-25 15:48:58 +0100 |
commit | 52268f4b32bb92b42d855dcc2788de45bb313a4d (patch) | |
tree | 42c3e97b8987b45f2f1cc4e9a2d94fbabe85d789 /21/a.lua | |
parent | ca0df3d74d675743b92d62207b0fe107af767d30 (diff) |
Add day 21
Diffstat (limited to '21/a.lua')
-rw-r--r-- | 21/a.lua | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/21/a.lua b/21/a.lua new file mode 100644 index 0000000..96ad83c --- /dev/null +++ b/21/a.lua @@ -0,0 +1,50 @@ +candidates = {} +appearances = {} + +function intersect(t1, t2) + t = {} + for k, _ in pairs(t1) do + if t2[k] then + t[k] = true + end + end + + return t +end + +for line in io.lines('input.txt') do + allergens_index = line:find('(', 1, true) + ingredients = {} + for ingredient in line:sub(1, allergens_index-2):gmatch("%a+") do + ingredients[ingredient] = true + if not appearances[ingredient] then + appearances[ingredient] = 0 + end + appearances[ingredient] = appearances[ingredient] + 1 + end + + for allergen in line:sub(allergens_index+10, -2):gmatch("%a+") do + if not candidates[allergen] then + candidates[allergen] = ingredients + else + candidates[allergen] = intersect(candidates[allergen], ingredients) + end + end +end + +unsafe = {} +for _, ingredients in pairs(candidates) do + for ingredient in pairs(ingredients) do + unsafe[ingredient] = true + end +end + +count = 0 + +for ingredient, appearances in pairs(appearances) do + if not unsafe[ingredient] then + count = count + appearances + end +end + +print(count) |