/// <summary>
        /// Method to execute the solutions to the Project Euler problems
        /// </summary>
        /// <param name="problemNumber">The problem number to execute</param>
        /// <returns>SolutionOutput object, giving info on result of running the problem</returns>
        public static SolutionOutput RunSolution(int problemNumber)
        {
            SolutionOutput solutionOutput;

            try
            {
                BaseProblem problem = GetProblemInstance(problemNumber);
                solutionOutput = problem.Solve();
            }
            catch (Exception exception)
            {
                solutionOutput = new SolutionOutput();
                solutionOutput.ValidationResult = false;
                solutionOutput.Output           = exception.Message;
            }
            return(solutionOutput);
        }
        /// <summary>
        /// Finds the Class for the problem based on string + passed in problem number
        /// Saves having a large switch statement
        /// </summary>
        /// <param name="problemNumber">The problem number to use to find class</param>
        /// <returns>BaseProblem object for the problem</returns>
        private static BaseProblem GetProblemInstance(int problemNumber)
        {
            string   className         = string.Format("{0}{1}", cClassNameStart, problemNumber);
            Assembly executingAssembly = Assembly.GetExecutingAssembly();

            if (null == executingAssembly)
            {
                throw new Exception("Could not get executing assembly");
            }

            Type problemClass = executingAssembly.GetTypes().FirstOrDefault(type => string.Compare(type.Name, className, StringComparison.CurrentCultureIgnoreCase) == 0);

            if (null == problemClass)
            {
                throw new ArgumentException("Could not find class for problem in assembly");
            }

            BaseProblem problemInstance = (BaseProblem)Activator.CreateInstance(problemClass);

            problemInstance.ProblemNumber = problemNumber;
            return(problemInstance);
        }