Here's mine:

MAXNUM = (( ARGV[0].to_i == 0 ) ? 1000000 : ARGV[0].to_i)

numbers = (0...MAXNUM).to_a
divs = Array.new

t = Time.now

MAXNUM.downto(0) do |n|
    nts = n.to_s
    next if numbers[n].nil? or
            ((nts[-1]-48) == 0) or
            (nts[0]-48) < (nts[-1]-48)*2 or
            nts == nts.reverse

    if n % (v = nts.reverse.to_i) == 0
      divs << [n,v]
      numbers.delete(v)
    end
end

puts "Benchmark = #{Time.now - t} secondi"
puts divs.inspect


On Sun, May 4, 2008 at 7:40 PM, Ken Bloom <kbloom / gmail.com> wrote:
> On Fri, 02 May 2008 10:28:00 -0500, Matthew Moss wrote:
>
>
>
> > This is a fairly simple quiz this week, as I'm in the middle of putting
>  > together a new website to replace the existing RQ2 website, which was
>  > supposed to be temporary. Hopefully the new one should be in place next
>  > week.
>  >
>  > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
>  >
>  > The three rules of Ruby Quiz 2:
>  >
>  > 1.  Please do not post any solutions or spoiler discussion for this quiz
>  > until 48 hours have passed from the time on this message.
>  >
>  > 2.  Support Ruby Quiz 2 by submitting ideas as often as you can! (A
>  > permanent, new website is in the works for Ruby Quiz 2. Until then,
>  > please visit the temporary website at
>  >
>  >      <http://matthew.moss.googlepages.com/home>.
>  >
>  > 3.  Enjoy!
>  >
>  > Suggestion:  A [QUIZ] in the subject of emails about the problem helps
>  > everyone on Ruby Talk follow the discussion.  Please reply to the
>  > original quiz message, if you can.
>  >
>  > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
>  >
>  > Quiz #161
>  > Reverse Divisible Numbers
>  >
>  > This week's quiz is borrowed from Jon Galloway (http://tinyurl.com/
>  > 5jvf37).
>  > Don't read the comments or solution there without trying this first!
>  >
>  > Your task is to write a bit of Ruby code that will find and report all
>  > integers that are divisible by their reverse. For example, 9801 is
>  > divisible by 1089.
>  >
>  > Your script should accept a single, optional argument to specify the
>  > upper
>  > limit of your search. If not provided, the default should be one
>  > million.
>  >
>  > There are two extra rules for finding these "reverse divisible" numbers:
>  >
>  > 1. Don't count palindromes; they are obviously reverse-divisible. 2.
>  > Don't count numbers ending with zero. Reversing such numbers forces you
>  >    to drop leading zeros on the divisor, and that's not as much fun.
>
>  Everyone's posted benchmarks, but nobody's posted code yet. It's been
>  more than 48 hours, so I guess I'll start.
>
>  MAX=1_000_000
>
>  #we want pairs of reverse,num where num.to_s==reverse.to_s.reverse and
>  #num*multiplier == reverse for some integer multiplier where
>  #multiplier >= 2
>  #
>  #if multiplier is a fraction, then we would swap num and reverse to get an
>  #integer, so we'll do it in one direction only
>  #
>  #if multiplier is 1, then num is a palindrome
>  #
>  #if the most significant digit of num > 4 then all num*multiplier
>  #have more digits than reverse has, so we need not check those
>
>  DIGITS=(Math.log10(MAX)).to_i
>  ranges=(0..DIGITS).collect{ |digits| 10**digits ...  5*10**digits}
>  ranges[-1]=ranges[-1].begin..MAX if MAX < ranges[-1].end
>
>  ranges.each do |range|
>   range.each do |num|
>     ns=num.to_s
>     reverse=ns.reverse.to_i
>     next if num==reverse
>     next if ns[-1,1]=='0'
>     next unless (reverse/num)*num==reverse
>     puts "#{num} * #{reverse/num} = #{reverse}"
>   end
>  end
>
>
>
>
>  --
>  Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory.
>  Department of Computer Science. Illinois Institute of Technology.
>  http://www.iit.edu/~kbloom1/
>
>



-- 
Go outside! The graphics are amazing!