refactored solution to problem 1