|  | @@ -20,8 +20,8 @@ func readDish(line string) dish {
 | 
	
		
			
				|  |  |  		log.Fatalf("Invalid line: %s", line)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	for _, ingredient := range strings.Split(parts[0], " ") {
 | 
	
		
			
				|  |  | -		food.ingredients = append(food.ingredients, ingredient)
 | 
	
		
			
				|  |  | +	for _, ing := range strings.Split(parts[0], " ") {
 | 
	
		
			
				|  |  | +		food.ingredients = append(food.ingredients, ing)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	cleanedPart2 := strings.TrimSuffix(parts[1], ")")
 | 
	
	
		
			
				|  | @@ -51,6 +51,35 @@ func readFile(file *os.File) []dish {
 | 
	
		
			
				|  |  |  	return foods
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +type ingredient struct {
 | 
	
		
			
				|  |  | +	count             int
 | 
	
		
			
				|  |  | +	possibleAllergens map[string]int
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func processFoods(foods []dish) map[string]ingredient {
 | 
	
		
			
				|  |  | +	processedIngredients := make(map[string]ingredient)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	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)}
 | 
	
		
			
				|  |  | +			} else {
 | 
	
		
			
				|  |  | +				currentIngredient = processedIngredients[item]
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			currentIngredient.count++
 | 
	
		
			
				|  |  | +			for _, allergen := range food.allergens {
 | 
	
		
			
				|  |  | +				currentIngredient.possibleAllergens[allergen]++
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			processedIngredients[item] = currentIngredient
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return processedIngredients
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  func main() {
 | 
	
		
			
				|  |  |  	if len(os.Args) < 2 {
 | 
	
		
			
				|  |  |  		log.Fatal("You need to specify a file!")
 | 
	
	
		
			
				|  | @@ -68,5 +97,6 @@ func main() {
 | 
	
		
			
				|  |  |  		log.Fatalf("Failed to close file: %s", err)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	fmt.Println(foods)
 | 
	
		
			
				|  |  | +	processedIngredients := processFoods(foods)
 | 
	
		
			
				|  |  | +	fmt.Println(processedIngredients)
 | 
	
		
			
				|  |  |  }
 |