I've started working my way through the Project Euler problems. Even in the first ten problems, it's been interesting to see how brute-force search approaches compare to solutions more oriented in number theory.
For this kind of modular problem solving, IPython has proved a fantastic environment to work in for a number of reasons:
- Simple text markdown + MathJax support for referencing problem text
- The "cells" allow for easy recording and reference of intermediate results
- The "magic" functions like "%timeit" and "%prun" are useful for simple timing and profiling
- Integrated packages/languages are easily accessible -- so far I've used SymPy and Cython