Parts 1 and 2 should be working.

Haven't written unit tests, too lazy.
Changed name, finished problem 3.
Fixed commenting
Last part