Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            var   lines           = File.ReadAllLines(".\\input.txt");
            Regex outerBagPattern = new Regex("[a-z ]*(?= bags contain)");
            Regex innerBagPattern = new Regex(@"(?<count>\d+) (?<color>[a-z ]+)(?= bags?[,\.])");
            var   bagDict         = new Dictionary <string, BagNode>();

            foreach (string line in lines)
            {
                string containerName = outerBagPattern.Match(line).Value;
                var    containedBags = innerBagPattern.Matches(line).OfType <Match>().Select(m =>
                                                                                             BagNode.GetLink(int.Parse(m.Groups["count"].Value), m.Groups["color"].Value));

                BagNode.AddNode(containerName, containedBags);
            }

            BagNode.SetReverseLinks();

            BagNode start = BagNode.AllBags["shiny gold"];

            // Part one
            Console.WriteLine(GetContainers(start).Distinct().Count());

            // Part two
            Console.WriteLine(GetContainedCount(start));

            Console.Read();
        }