コード例 #1
0
        private int CountBagsInside(BagSpec bagToLookIn)
        {
            var count = 0;

            foreach (var bag in bagToLookIn.Bags)
            {
                count += bag.Amount;

                count += CountBagsInside(_bagSpecs.First(a => a.ColorName.Equals(bag.ColorName))) *
                         (bag.Amount == 0 ? 1 : bag.Amount);
            }

            return(count);
        }
コード例 #2
0
        private bool CanHoldGoldBag(BagSpec bagSpec)
        {
            if (bagSpec.Bags.Any(a => a.ColorName.Equals(GoldBagName)))
            {
                return(true);
            }

            foreach (var bag in bagSpec.Bags)
            {
                var bagToSearch = _bagSpecs.FirstOrDefault(a => a.ColorName.Equals(bag.ColorName));
                if (bagToSearch != null)
                {
                    if (CanHoldGoldBag(bagToSearch))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
コード例 #3
0
        private void ParseBagSpecifications(string pathToInput)
        {
            var input = System.IO.File.ReadAllLines(pathToInput);

            _bagSpecs = new List <BagSpec>();
            foreach (var bagSpec in input)
            {
                //format: [Color] bags contain [amount] color bag(s) (,[amount] [color] bag(s).)*
                var mainBagRegexMatch = Regex.Match(bagSpec, @"(.+) bags contain");
                var color             = mainBagRegexMatch.Groups[1].ToString();
                var mainBag           = new BagSpec(color, 1);
                var subBagsRegex      = new Regex(@"(\d+) ([a-z\s]+) bag");
                foreach (Match match in subBagsRegex.Matches(bagSpec))
                {
                    var amount   = match.Groups[1];
                    var subColor = match.Groups[2];
                    mainBag.Bags.Add(new BagSpec(subColor.ToString(), Convert.ToInt32(amount.ToString())));
                }

                _bagSpecs.Add(mainBag);
            }
        }