Here a few things I made in the past.
(stronger !) A program which prints the MD5 of its own source code.
Always wanted to have call/cc in ocaml ? I made a naïve interpreter just for you ! (but it's also a simple lex/yacc parser for a subset of caml)
I wasted some time writing a BF program (BF is a Turing-machine-like language) to compute the factorial : it's like that :
I even did it in lambda-calculus (using Church's integers --- Skilled people will recognize the Y fixed-point combinator at the begining) : ((λg.λh.(h ((g g) h)) λg.λh.(h ((g g) h))) λf.λn.(((λx.λy.λz.((x y) z) (λn.((n λz.λf.λx.x) λx.λy.x) n)) λf.λx.(f x)) ((λm.λn.λf.(m (n f)) n) (f (λk.(λs.(s λf.λx.x) ((k λs.λz.((z (λn.λf.λx.(f ((n f) x)) (λs.(s λx.λy.x) s))) (λs.(s λx.λy.x) s))) λz.((z λf.λx.x) λf.λx.x))) n)))))