RosettaCodeData/Task/Vampire-number/Ruby/vampire-number.rb

32 lines
719 B
Ruby
Raw Permalink Normal View History

2013-04-11 01:07:29 -07:00
def factor_pairs n
2015-02-20 00:35:01 -05:00
first = n / (10 ** (n.to_s.size / 2) - 1)
2013-10-27 22:24:23 +00:00
(first .. n ** 0.5).map { |i| [i, n / i] if n % i == 0 }.compact
2013-04-11 01:07:29 -07:00
end
def vampire_factors n
2013-10-27 22:24:23 +00:00
return [] if n.to_s.size.odd?
2013-04-11 01:07:29 -07:00
half = n.to_s.size / 2
factor_pairs(n).select do |a, b|
a.to_s.size == half && b.to_s.size == half &&
2013-10-27 22:24:23 +00:00
[a, b].count {|x| x%10 == 0} != 2 &&
2013-04-11 01:07:29 -07:00
"#{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?
2013-10-27 22:24:23 +00:00
puts "#{i}:\t#{vf}"
2013-04-11 01:07:29 -07:00
vamps += 1
end
end
[16758243290880, 24959017348650, 14593825548650].each do |n|
2013-10-27 22:24:23 +00:00
if (vf = vampire_factors n).empty?
puts "#{n} is not a vampire number!"
else
2015-02-20 00:35:01 -05:00
puts "#{n}:\t#{vf}"
2013-10-27 22:24:23 +00:00
end
2013-04-11 01:07:29 -07:00
end