Description for today’s challenge is here.
First, let’s capture what an ingredient is in our model:
Notice that we’ve also added the + and * operators to make combining different ingredients and multiplying by quantity easier when we mix them together to make and score a cake:
The input for this challenge looks like the following:
Sprinkles: capacity 2, durability 0, flavor -2, texture 0, calories 3
Butterscotch: capacity 0, durability 5, flavor -3, texture 0, calories 3
Chocolate: capacity 0, durability 0, flavor 5, texture -1, calories 8
Candy: capacity 0, durability -1, flavor 0, texture 5, calories 8
so let’s parse them into our model:
here I have reused the same Regex active pattern as Day 7 to parse each line.
Next, from the list of ingredients, we need to work out all combinations of them that add to a total of 100 ingredients being used:
From the above code, accN means the total number of ingredients accumulated so far — it saves me from having to calculate it each time. For each kind of ingredients, we may include 0 to 100 of it — 0 = don’t use this ingredient in the cake; 100 = make the cake out of only this ingredient. In hindsight, based on the data, you can’t make a cake with a non-zero score if you have 100 of any ingredient as each ingredient has a negative value for one of its attributes.
Finally, for each combination, make and score the cake and find the highest score:
Not much needs to change here, except we need to filter out cakes whose calories count is not 500: