A Programmer's Notebook: Featuring 100 puzzles