Add Solution class to leverage encapsulation
Add generic Solver class to act as an extension point
Create ProblemOneIterativeSolver to implement a specific solver for problem one
Add ProblemOneNoniterativeSolver to implement another specific solver for problem one.
Add generic Problem class to act as an extension point
Add specific ProblemOne class to implement abstract Problem class
Update unit tests to confirm new refactored implementation still works as expected
Add ProblemDetails to leverage encapsulation
Refactor abstract Problem class to hold ProblemDetails automatic property
Refactor specific ProblemOne class to use new Problem constructor
Refactor generic Solver to utilize ProblemDetails
Refactored specific ProblemOneIterativeSolver to leverage new ProblemDetails
Updated specific ProblemOneNoniterativeSolver Solve method signature to match new Solver method signature
Updated unit tests to confirm new refactored implementation works as expected