예제 #1
0
        public static void DoTask1()
        {
            Console.WriteLine("Task 1");
            var bagStrings    = File.ReadAllLines("input.txt");
            var bagRuleParser = new BagRuleParser();

            BagRule[] parsedBagRules =
                bagStrings
                .Select(bagRuleParser.Parse)
                .ToArray() !;

            var shinyGoldBagColor = new Color("shiny gold");

            int result = parsedBagRules.Aggregate(
                0,
                (acc, r) => CanHoldBagColor(
                    parsedBagRules,
                    r,
                    shinyGoldBagColor
                    )
                > 0
                        ? acc + 1
                        : acc
                );

            Console.WriteLine($"Amount: {result}");
        }
예제 #2
0
        static void Main(string[] args)
        {
            var rules = File.ReadAllLines("input.txt");

            var parser      = new BagRuleParser();
            var parsedRules = parser.Parse(rules);

            Console.WriteLine(new BagRuleEvaluator(parsedRules).CountBagsWithAtLeastOne("shiny gold"));
            Console.WriteLine(new BagCalculator(parsedRules).CountBags("shiny gold"));
        }
예제 #3
0
        public static void DoTask2()
        {
            Console.WriteLine("Task 2");
            var bagStrings    = File.ReadAllLines("input.txt");
            var bagRuleParser = new BagRuleParser();

            IReadOnlyDictionary <Color, BagRule> parsedBagRules =
                bagStrings
                .Select(bagRuleParser.Parse)
                .Where(r => r != null)
                .ToDictionary(r => r !.BagColor) !;

            var shinyGoldBagColor = new Color("shiny gold");
            var rule   = parsedBagRules[shinyGoldBagColor] !;
            int result = CountContainedBags(parsedBagRules, rule);

            Console.WriteLine($"Amount: {result}");
        }