Grokking Algorithms: An illustrated guide for programmers and other curious people