exercises from http://eloquentjavascript.net. go away.