When I was in university, with a friend we wrote stack++, which was using stacks to do everything. Stack strings, stack numbers, stack operators, etc. We only give you two stacks per type. You would define your program using long string that would stack all of your stuff into stacks, then it starts unstacking the operators-1 stack, and you're on your own.
It was of course completely pointless, but to this day I regularly go back my stack of old hard drives and cd backups to see if I can find back the source code.