A Text-based CAPTCHA -------------------- Overview ======== A CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) is something designed to make it easy to distinguish between a computer and person, they are most often used in blog and web forum systems to fight spamming. A CAPTCHA can be viewed as a challenge/response system meeting the following criteria: 1) It must be easy for a computer to generate question/answer pairs. 1b) It must also be easy to verify that some textual input is equal to the answer. 2) It must be easy for a person to generate the answer given the question. 3) It must be hard for a computer to generate the answer given the question. The most common kind of CAPTCHA is an image containing a set of numbers which have been somehow distorted, it is (supposedly) easy for a person to figure what numbers are in the image and very difficult for a computer to do the same. Images do work great as CAPTCHAs, but they have a major drawback: it's basically impossible for people with sight problems to answer the CAPTCHA. Goal ==== The goal of this quiz is to write a function which produces textual CAPTCHAs and therefore works well with screen readers and text browsers. To do this we're going to rely on two observations: 1) computers can be taught to generate natural-language text but they're notoriously bad at understanding it and 2) humans are pretty good at simple arithmetic. Write a function named cl-user::generate-captcha with the following interface: (cl-user::generate-captcha) ==> question, answer question - a string answer - a string QUESTION should be a string of English text asking to perform some simple arithmetic. It is not essential that QUESTION be perfect English, only that a person, after reading QUESTION can easily deduce, and type, ANSWER. Here are same (completely made up) examples: (cl-user::generate-captcha) ==> "what is one times 2?", "2" (cl-user::generate-captcha) ==> "start with three apples, eat 2 of them, how mny r lft?", "1" (cl-user::generate-captcha) ==> "go buy 3 apples, sell them all, how many are left?", "0" Bonus Questions =============== 1) Write a generator which produces Latin output. 2) Write a captcha-cracker for one of the solutions to this quiz. 3) Write a completly different text based captcha. Useful Links ============= http://www.captcha.net/ http://en.wikipedia.org/wiki/Captcha http://www.w3.org/TR/turingtest/ p.s. - this is the first cl-quiz, comments/suggestions welcome.