internal static int Part2(string input) { string[] lines = input.Split('\n'); List <BagHolder> bags = BagParser(lines); List <string> searchContainers = new List <string>(); searchContainers.Add("shiny gold"); int bagCount = 0; while (searchContainers.Count > 0) { string currentSearch = searchContainers[0]; searchContainers.RemoveAt(0); BagHolder bag = bags.Find(x => x.name == currentSearch); // for every bag in the search, count its conents // and add them to the search foreach (string b in bag.canContain.Keys) { int count = bag.canContain[b]; for (int i = 0; i < count; i++) { searchContainers.Add(b); } bagCount += count; } } return(bagCount); }
private static List <BagHolder> BagParser(string[] lines) { Regex bagMatch = new Regex(@"([a-z ]+) bags contain (.*)"); List <BagHolder> bags = new List <BagHolder>(); foreach (string line in lines) { MatchCollection matches = bagMatch.Matches(line); foreach (Match match in matches) { GroupCollection groups = match.Groups; BagHolder holder = new BagHolder(groups[1].Value, groups[2].Value); bags.Add(holder); } } return(bags); }