Data structures, algorithms and programming puzzles for fun