Finally, I like the way this assignment brings out connections between theory and practice.
Programming assignments in theory classes should reinforce that theory and implementation are not opposite sides of the CS playing field, but go hand in hand to solve problems.