Project Euler Problem 4

def comb(*enums, &block)
  comb2(enums, 0, [], &block)
end

def comb2(enums, index, params, &block)
  return block.call(*params) if index >= enums.size
  enums[index].each do |x|
    params << x
    comb2(enums, index + 1, params, &block)    
    params.pop
  end
end

def anagam_number?(n)
  s = n.to_s
  (0 ... s.size / 2).all? {|i| s[i] ==  s[s.size - i - 1] }
end

def f(enum)
  ns = []
  comb(enum, enum) do |n, m|
    guess = n * m
    ns << guess if anagam_number?(guess)
  end
  ns.max
end

p f(10 .. 99)
p f(100 .. 999)