Exemple #1
0
        static int Pt1(Dictionary <string, BagRule> Rules)
        {
            BagRule          shinyGold  = Rules["shiny gold"];
            HashSet <string> candidates = new HashSet <string>();
            Stack <BagRule>  bagStack   = new Stack <BagRule>();

            bagStack.Push(shinyGold);

            while (bagStack.Count > 0)
            {
                foreach (var cont in bagStack.Pop().ContainedBy)
                {
                    candidates.Add(cont.ContainerColor);

                    if (cont.ContainedBy.Count > 0)
                    {
                        bagStack.Push(cont);
                    }
                }
            }

            return(candidates.Count);
        }
Exemple #2
0
        static int Pt2(Dictionary <string, BagRule> Rules)
        {
            BagRule         shinyGold = Rules["shiny gold"];
            Stack <BagRule> bagStack  = new Stack <BagRule>();
            int             bags      = 0;

            bagStack.Push(shinyGold);

            while (bagStack.Count > 0)
            {
                var rule = bagStack.Pop();
                bags += rule.Contains.Values.Sum();

                foreach (var k in rule.Contains.Keys)
                {
                    for (var i = 0; i < rule.Contains[k]; i++)
                    {
                        bagStack.Push(k);
                    }
                }
            }

            return(bags);
        }