Programming exercises from Coursera Algorithms: Design and Analysis 2 course by prof. Tim Roughgarden