Learn how to model problems, and how to optimize performance by using some of the advanced features of Python.
Lesson 1 Winning Poker Hands Steps of the design process and developing for clarity and generality. Arguments for program correctness and experimentation and simulation. Design tradeoffs; Simplicity and Clarity. Decomposition and composability. Lesson 2 Back of the Envelope Back of envelope calculations: When to use brute force and when to be clever. The Zebra puzzle: Generator expressions, Permutations and combinations. Cryptarithmetic; Recursive and wishful thinking; Longest palindrome substring algorithm. Lesson 3 Regular Expressions, other languages and interpreters Defining the language of regular expressions and Interpreting the language. Defining the set of strings matched by a regular expression Other languages. Lesson 4 Dealing with complexity through search Search: finding your way with a flashlight or boat. Analyzing the efficiency of an algorithm. Recurrence relations and Matching data types with algorithms. Lesson 5 Dealing with uncertainty through probability Probability: the game of Pig. Maximizing expected utility to optimize strategy. Lesson 6 Word Games Managing complexity. Large sets of words. Appropriate data structures. Lesson 7 Conclusion Interviews and practice exam.