Might be interesting if for each question that was "clearly" spam, they'd get a spam-point on their account. Then for each point (or modified by some
multiplier), ask another level (or set) of "are you human" questions.
I'd have the spam-points on their account be dated and aged, so after 'N' "time units" (MultK * [days|weeks]?) the oldest point expire. Would have to play with numbers, but maybe 'spam points**(expK)'. I seem to find that a bit more "useful" ("sane recovery" based on behavior, with minimal intervention needed by admins).
So for expK=1.4:
5 pts would create a 9.5 day wait before 1st expiration,
10pts=>25 days
20 => 66 days...etc.
Constant might need playing with depending on feedback and how well it deters spam.
I tend to like having the computer follow a formula, by default, so if admins are busy and can't respond, the system does its best to "auto-manage" itself, Admins could remove 1 or more points if the situation justified it. I also like the computer handling the 'default' case, so usually there will be little reason for people to think they are being singled out -- never a good thing in maintaining a community environment.