finished ch5 programming challenge 19, spent way too much time on it but it uses a handful of relatively advanced features.