While you make a good point about it being much more difficult for programs to catch the DIV0, it's also hard to get a human to correctly write a response to it.

Mathematically, 1/0 is meaningless. The best you can get is by taking limits to get answers like "does not exist" or "infinite", but you couldn't expect humans to answer that any better without a disclaimer (which could then, feasibly, be picked up by a program as well).

Sure, it could be done, but is it worth it? Maybe.

I do agree though -- my catpcha are sad -- but it'd be very much possible to write some more difficult ones. The deck one was a halfhearted attempt at such and is hardly the upper limit. I tried to make sure this was very easy to do, but didn't focus on actually doing it. My bad.

All that being said, I'm not going to defend my code too much. It's very simplistic and I'm not good enough to push it too far past that within a reasonable amount of time. However, I'd love to see a more complete answer.

On 5/3/06, Pascal Bourguignon <pjb@informatimago.com> wrote:
Tel writes:
> (defvar *query-strings* '((* "what is ~r times ~r?"
>                          (gennumber gennumber))
>                         (* "what is the product of ~r and ~r?"
>                          (gennumber gennumber))
>                         (* "what is the area of a ~r by ~r rectangle?"
>                          (gennumber gennumber))
>                         (* "If you have ~r card~:p in a deck, then give the deck away,
> how many cards do you have?~*"
>                          (gennumber 0))
>                         (+ "what is ~r plus ~r?"
>                          (gennumber gennumber))
>                         (+ "what is the sum of ~r, ~r, and ~r?"
>                          (gennumber gennumber gennumber))
>                         (+ "if you have ~r apricot~:p and buy ~r more, how many do you have?"
>                          (gennumber gennumber))
>                         (- "what is ~r less ~r?"
>                          (gennumber gennumber))
>                         (- "what is the difference between ~r and ~r?"
>                          (gennumber gennumber))
>                         (- "if you have ~r dollar~:p but owe ~r, you effectively have how many?"
>                          (gennumber gennumber))
>                         (/ "what is ~r over ~r?"
>                          (gennumber gennumber))
>                         (/ "what is the quotient of ~r and ~r"
>                          (gennumber gennumber))
>                         (/ "if you could split ~r watch~:*~[es~;~:;es~] into ~r equal
> group~:p, how many are in each group?"
>                          (gennumber gennumber))))

Really guys, these are no captcha.  Have a look at the student program
in PAIP ( norvig.com).  It could easily solve these kind of problems,
with very little or no added rules and code.


Why remove the division by 0?  On the contrary, this is something that
could discriminate between a human and an computer, more than "what's
the difference between three and two".  Even if some human would
answer: EDIV0.


--
__Pascal Bourguignon__                     http://www.informatimago.com/

Pour moi, la grande question n'a jamais été: «Qui suis-je? Où vais-je?»
comme l'a formulé si adroitement notre ami Pascal, mais plutôt:
«Comment vais-je m'en tirer?» -- Jean Yanne



--
~ja.