This is a multi-day assignment split into the following parts. Your task is to complete each part's assignment, one at a time, before moving on to the next part.
Additionally, each part has a set of optional bonus assignments to try once you complete its main assignment. Since parts share many of the same bonus assignments, you may move to the next part without having finished all the bonuses.
The solutions are available to instructors as well as students who've completed this series.