Exemple #1
0
        public static List <LuggageDescription> Search(int quantity, string color, List <LuggageDescription> luggageDescriptions)
        {
            var result = new List <LuggageDescription>();

            foreach (var container in luggageDescriptions)
            {
                if (container.Color == color)
                {
                    var luggage = new LuggageDescription(quantity, container.Color);

                    foreach (var containee in container.Contains)
                    {
                        var contains = Search(containee.Quantity, containee.Color, luggageDescriptions);

                        foreach (var contain in contains)
                        {
                            luggage.Contains.Add(contain);
                        }
                    }

                    result.Add(luggage);
                }
            }
            return(result);
        }
Exemple #2
0
        public static int RecursiveCount(LuggageDescription luggage)
        {
            int sum = 0;

            foreach (var containee in luggage.Contains)
            {
                sum += containee.Quantity + (containee.Quantity * RecursiveCount(containee));
            }

            return(sum);
        }
Exemple #3
0
        internal static List <LuggageDescription> Parse(string filename)
        {
            var result = new List <LuggageDescription>();

            var containRegex    = new Regex(@"^(?<container>.*) bags contain (?<containees>.*)\.$");
            var containeesRegex = new Regex(@"(?<number>\d*) (?<description>.+) bag");

            foreach (var line in File.ReadAllLines(filename))
            {
                var containResult = containRegex.Match(line);

                var luggage = new LuggageDescription(1, containResult.Groups["container"].Value);

                var containees = containResult.Groups["containees"].Value;

                if (containees == "no other bags")
                {
                    result.Add(luggage);
                    continue;
                }

                var parts = containees.Split(", ");
                foreach (var part in parts)
                {
                    var containeeResult = containeesRegex.Match(part);

                    var containeeNumber      = int.Parse(containeeResult.Groups["number"].Value);
                    var containeeDescription = containeeResult.Groups["description"].Value;

                    var containee = new LuggageDescription(containeeNumber, containeeDescription);

                    luggage.Contains.Add(containee);
                }

                result.Add(luggage);
            }

            return(result);
        }