blob: 96ad83c9ec1407e331a19aafb6b68a2e088e489a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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)
|