40 lines
782 B
Plaintext
40 lines
782 B
Plaintext
func is_vampire (n) {
|
|
return [] if n.ilog10.is_even
|
|
|
|
var l1 = n.isqrt.ilog10.ipow10
|
|
var l2 = n.isqrt
|
|
|
|
var s = n.digits.sort.join
|
|
|
|
gather {
|
|
n.divisors.each { |d|
|
|
|
|
d < l1 && next
|
|
d > l2 && break
|
|
|
|
var t = n/d
|
|
|
|
next if (d%%10 && t%%10)
|
|
next if ("#{d}#{t}".sort != s)
|
|
|
|
take([d, t])
|
|
}
|
|
}
|
|
}
|
|
|
|
say "First 25 Vampire Numbers:"
|
|
|
|
with (1) { |i|
|
|
for (var n = 1; i <= 25; ++n) {
|
|
var fangs = is_vampire(n)
|
|
printf("%2d. %6s : %s\n", i++, n, fangs.join(' ')) if fangs
|
|
}
|
|
}
|
|
|
|
say "\nIndividual tests:"
|
|
|
|
[16758243290880, 24959017348650, 14593825548650].each { |n|
|
|
var fangs = is_vampire(n)
|
|
say "#{n}: #{fangs ? fangs.join(', ') : 'is not a vampire number'}"
|
|
}
|