32 lines
719 B
Ruby
32 lines
719 B
Ruby
def factor_pairs n
|
|
first = n / (10 ** (n.to_s.size / 2) - 1)
|
|
(first .. n ** 0.5).map { |i| [i, n / i] if n % i == 0 }.compact
|
|
end
|
|
|
|
def vampire_factors n
|
|
return [] if n.to_s.size.odd?
|
|
half = n.to_s.size / 2
|
|
factor_pairs(n).select do |a, b|
|
|
a.to_s.size == half && b.to_s.size == half &&
|
|
[a, b].count {|x| x%10 == 0} != 2 &&
|
|
"#{a}#{b}".chars.sort == n.to_s.chars.sort
|
|
end
|
|
end
|
|
|
|
i = vamps = 0
|
|
until vamps == 25
|
|
vf = vampire_factors(i += 1)
|
|
unless vf.empty?
|
|
puts "#{i}:\t#{vf}"
|
|
vamps += 1
|
|
end
|
|
end
|
|
|
|
[16758243290880, 24959017348650, 14593825548650].each do |n|
|
|
if (vf = vampire_factors n).empty?
|
|
puts "#{n} is not a vampire number!"
|
|
else
|
|
puts "#{n}:\t#{vf}"
|
|
end
|
|
end
|