So there's this neat little Regex learning site at Regex Crossword - it's fun. I worked straight through it and enjoyed the whole thing. (HNN quote that made me laugh: "I tried to solve these with regular expressions. Now I have two crosswords.").
This led to the realization that constraint programming is actually a fun type of puzzle - and that automating it is something that was once considered AI, but is now no-true-Scotsmanned out of the domain. One example of a solution to this kind of problem using Haskell's Regex.Genex package is here. Cool stuff!