def palindrome(n1,n2) best = 0 n2.downto(n1) do |i| n2.downto(i) do |j| if i*j > best then s = (i*j).to_s best = i*j if s == s.reverse end end end best end def assert(expect, actual) puts "#{expect} != #{actual}" if expect != actual end start = Time.now assert 9009, palindrome(10,99) assert 906609, palindrome(100,999) puts Time.now-start30 ms.