Final project for UCB's CS61A