/// <summary>
        /// Returns the sum of a set of delimited numbers.
        /// </summary>
        /// <param name="numbers">A string containing delimited numbers. This should contain one or more lines.</param>
        /// <returns>The sum.</returns>
        public int Add(string numbers)
        {
            var delimiters = _delimiterParser.Parse(numbers);

            var lines = _numberLinesParser.GetLines(numbers);

            var linesOfNumbers = lines.Select(line => _numbersParser.Parse(line, delimiters));

            var filteredNumbers = linesOfNumbers.Select(line => _numberFilter.Filter(line));

            var detectedNumbers = filteredNumbers.Select(nums => _numberDetector.Detect(nums)).SelectMany(arr => arr);

            if (detectedNumbers.Any())
            {
                throw new InvalidNumbersException($"Invalid numbers encountered", detectedNumbers);
            }

            return(_numberAdder.Add(filteredNumbers));
        }