|
@@ -51,51 +51,33 @@ func readFile(file *os.File) []dish {
|
|
return foods
|
|
return foods
|
|
}
|
|
}
|
|
|
|
|
|
-type ingredient struct {
|
|
|
|
- count int
|
|
|
|
- possibleAllergens map[string]int
|
|
|
|
|
|
+type alerg struct {
|
|
|
|
+ count int
|
|
|
|
+ ingredients map[string]int
|
|
}
|
|
}
|
|
|
|
|
|
-func processFoods(foods []dish) map[string]ingredient {
|
|
|
|
- processedIngredients := make(map[string]ingredient)
|
|
|
|
|
|
+func processFoods(foods []dish) map[string]alerg {
|
|
|
|
+ allergensPossibleForIngredients := make(map[string]alerg)
|
|
|
|
|
|
for _, food := range foods {
|
|
for _, food := range foods {
|
|
- for _, item := range food.ingredients {
|
|
|
|
- var currentIngredient ingredient
|
|
|
|
- if _, ok := processedIngredients[item]; !ok {
|
|
|
|
- currentIngredient = ingredient{count: 0, possibleAllergens: make(map[string]int)}
|
|
|
|
|
|
+ for _, allergen := range food.allergens {
|
|
|
|
+ var currentAllergen alerg
|
|
|
|
+ if _, ok := allergensPossibleForIngredients[allergen]; !ok {
|
|
|
|
+ currentAllergen = alerg{count: 0, ingredients: make(map[string]int)}
|
|
} else {
|
|
} else {
|
|
- currentIngredient = processedIngredients[item]
|
|
|
|
|
|
+ currentAllergen = allergensPossibleForIngredients[allergen]
|
|
}
|
|
}
|
|
|
|
|
|
- currentIngredient.count++
|
|
|
|
- for _, allergen := range food.allergens {
|
|
|
|
- currentIngredient.possibleAllergens[allergen]++
|
|
|
|
|
|
+ currentAllergen.count++
|
|
|
|
+ for _, ingredient := range food.ingredients {
|
|
|
|
+ currentAllergen.ingredients[ingredient]++
|
|
}
|
|
}
|
|
|
|
|
|
- processedIngredients[item] = currentIngredient
|
|
|
|
|
|
+ allergensPossibleForIngredients[allergen] = currentAllergen
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- return processedIngredients
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func part1(processedIngredients map[string]ingredient) int {
|
|
|
|
- sum := 0
|
|
|
|
-
|
|
|
|
- for _, item := range processedIngredients {
|
|
|
|
- countPossibleAllergens := 0
|
|
|
|
-
|
|
|
|
- for _, value := range item.possibleAllergens {
|
|
|
|
- countPossibleAllergens += value
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if countPossibleAllergens <= item.count {
|
|
|
|
- sum += item.count
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return sum
|
|
|
|
|
|
+ return allergensPossibleForIngredients
|
|
}
|
|
}
|
|
|
|
|
|
func main() {
|
|
func main() {
|
|
@@ -115,6 +97,6 @@ func main() {
|
|
log.Fatalf("Failed to close file: %s", err)
|
|
log.Fatalf("Failed to close file: %s", err)
|
|
}
|
|
}
|
|
|
|
|
|
- processedIngredients := processFoods(foods)
|
|
|
|
- fmt.Println("Part1:", part1(processedIngredients))
|
|
|
|
|
|
+ allergens := processFoods(foods)
|
|
|
|
+ fmt.Println(allergens)
|
|
}
|
|
}
|