exercise files from Eloquent Javascript :: Marijn Haverbeke