diff --git a/2020/Day07.cs b/2020/Day07.cs index f6d1730..d7bffa8 100644 --- a/2020/Day07.cs +++ b/2020/Day07.cs @@ -64,6 +64,16 @@ namespace AdventOfCode { } } + static int CountBags(List rules, string target) { + int total = 1; + foreach (Contains rule in rules) { + if (rule.Outer == target) { + total += rule.Count * CountBags(rules, rule.Inner); + } + } + return total; + } + static int Part1() { List contains = ParseRules(File.ReadAllLines(Util.RootDir + "day07.txt")); return ComputePart1(contains); @@ -71,7 +81,7 @@ namespace AdventOfCode { static int Part2() { List contains = ParseRules(File.ReadAllLines(Util.RootDir + "day07.txt")); - return -1; + return CountBags(contains, "shiny gold") - 1; } [Fact] @@ -88,9 +98,19 @@ faded blue bags contain no other bags. dotted black bags contain no other bags.".Split('\n'); Assert.Equal(4, ComputePart1(ParseRules(example))); - Assert.Equal(213, Part1()); - Assert.Equal(-1, Part2()); + + string[] example2 = +@"shiny gold bags contain 2 dark red bags. +dark red bags contain 2 dark orange bags. +dark orange bags contain 2 dark yellow bags. +dark yellow bags contain 2 dark green bags. +dark green bags contain 2 dark blue bags. +dark blue bags contain 2 dark violet bags. +dark violet bags contain no other bags.".Split('\n'); + Assert.Equal(127, CountBags(ParseRules(example2), "shiny gold")); + + Assert.Equal(38426, Part2()); } } }