Commiting full solution to Programming Assignment 2