Пример #1
0
        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);
        }
Пример #2
0
        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);
        }