Algorithms, Data Structures, Puzzles and Mathematics