Beispiel #1
0
        public async Task <string> ExecuteAsync(string[] data)
        {
            var bagRules = new List <BagRule>();

            foreach (var rules in data)
            {
                var ruleParts = rules.Split(_bagToRuleDelimiter, StringSplitOptions.RemoveEmptyEntries);
                var bagRule   = new BagRule(ruleParts[0]);

                if ((ruleParts[1] != _emptyBagPhrase))
                {
                    var containedBagsParts = ruleParts[1].Remove(ruleParts[1].Length - 1, 1).Split(_containedBagDelimiter, StringSplitOptions.RemoveEmptyEntries);

                    var containedBags = containedBagsParts
                                        .Select(x => x.Replace(_bagsSuffix, string.Empty).Replace(_bagSuffix, string.Empty).Split(_bagRuleDelimiter, StringSplitOptions.RemoveEmptyEntries))
                                        .Select(x => new BagContents(int.Parse(x[0]), string.Join(_bagRuleDelimiter, x.Skip(1))))
                                        .ToList();

                    bagRule.AddContents(containedBags);

                    bagRules.Add(bagRule);
                }
                else
                {
                    bagRules.Add(bagRule);
                }
            }

            return(CountBags(bagRules).ToString());
        }
Beispiel #2
0
        public async Task <string> ExecuteAsync(string[] data)
        {
            var totalBagsNeeded = 0;
            var bagRules        = new List <BagRule>();

            foreach (var rules in data)
            {
                var ruleParts = rules.Split(_bagToRuleDelimiter, StringSplitOptions.RemoveEmptyEntries);
                var bagRule   = new BagRule(ruleParts[0]);

                if ((ruleParts[1] != _emptyBagPhrase))
                {
                    var containedBagsParts = ruleParts[1].Remove(ruleParts[1].Length - 1, 1).Split(_containedBagDelimiter, StringSplitOptions.RemoveEmptyEntries);

                    var containedBags = containedBagsParts
                                        .Select(x => x.Replace(_bagsSuffix, string.Empty).Replace(_bagSuffix, string.Empty).Split(_bagRuleDelimiter, StringSplitOptions.RemoveEmptyEntries))
                                        .Select(x => new BagContents(int.Parse(x[0]), string.Join(_bagRuleDelimiter, x.Skip(1))))
                                        .ToList();

                    bagRule.AddContents(containedBags);

                    bagRules.Add(bagRule);
                }
                else
                {
                    bagRules.Add(bagRule);
                }
            }

            var bagsToReview = new List <BagRule>
            {
                bagRules.FirstOrDefault(x => x.Bag == _targetBag)
            };

            var allValidBags = new HashSet <string>();

            BagsThatCouldContainTargetBag(bagRules, new List <string> {
                _targetBag
            }, ref allValidBags);

            totalBagsNeeded = allValidBags.Count;

            return(totalBagsNeeded.ToString());
        }