A exercise for testing algorithmic and OOP design knowledge.