CS661 (Algorithms) was taught by Gabe Robins. It was fun. I especially enjoyed meta-programming (writing programs to write other programs). The projects below show some of my efforts in those areas.
The basic strategy I used is to encode the program into non-escaped characters, and then print out the assignment of that encoded string along with the instructions for decoding and printing the string. For the PERL, I encode in hex (easy decoding with the pack() subroutine), and for C, I encode by adding 5 to each character of the string.
For more info about self-reproducting programs, see Gary Thompson's Quine Page. And be sure to check out Hofstadter's Godel, Escher, Bach!
My big project for the class was Trav's Tic-Tac-To Trainer (TTT). It used traditional AI to train neural networks how to play Tic-Tac-Toe.