https://medium.com/@moonayoung/mastering-programming-by-harnessing-the-power-of-algorithms-837271dff979