I did a lot of the later Project Euler problems when I was trying to learn Haskell. Getting things to run in a reasonable amount of time without just writing brute force C code was very challenging, and I learned a lot from the discussion sections you get to read after finding the answer.