Just one minor nit:

Christian Neukirchen <chneukirchen / gmail.com> writes:

> def luhn?(n)
>   f = 2
>   (n.delete("^0-9").reverse.split(//).map{|d|d.to_i}.
>      inject(0) { |a,e| f=3-f; a + (e*f > 9 ? e*f-9 : e*f) } % 10).zero?
> end

You do know that (e*f > 9 ? e*f-9 : e*f) is equivalent to e*f%9,
right?  So that makes this method:

def luhn?(n)
  f = 2
  (n.delete("^0-9").reverse.split(//).map{|d|d.to_i}.
     inject(0) { |a,e| f=3-f; a + e*f%9 } %10).zero?
end

(I still like my short version better, but too each his own)

-- 
s=%q(  Daniel Martin -- martin / snowplow.org
       puts "s=%q(#{s})",s.to_a[1]       )
       puts "s=%q(#{s})",s.to_a[1]