Refactored solution to problem 1