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)