28 lines
786 B
Raku
28 lines
786 B
Raku
sub is_vampire (Int $num) {
|
|
my $digits = $num.comb.sort;
|
|
my @fangs;
|
|
(10**$num.sqrt.log(10).floor .. $num.sqrt.ceiling).map: -> $this {
|
|
next if $num % $this;
|
|
my $that = $num div $this;
|
|
next if $this %% 10 && $that %% 10;
|
|
@fangs.push("$this x $that") if ($this ~ $that).comb.sort eq $digits;
|
|
}
|
|
@fangs
|
|
}
|
|
|
|
constant @vampires = flat (3..*).map: -> $s, $e {
|
|
(10**$s .. 10**$e).hyper.map: -> $n {
|
|
next unless my @fangs = is_vampire($n);
|
|
"$n: { @fangs.join(', ') }"
|
|
}
|
|
}
|
|
|
|
say "\nFirst 25 Vampire Numbers:\n";
|
|
|
|
.say for @vampires[^25];
|
|
|
|
say "\nIndividual tests:\n";
|
|
|
|
.say for (16758243290880, 24959017348650, 14593825548650).hyper(:1batch).map: {
|
|
"$_: " ~ (is_vampire($_).join(', ') || 'is not a vampire number.')
|
|
}
|