Stanford CS106A Assignment 6 Solution (NameSurfer)