Self numbers: Difference between revisions

Added Perl
(Added Perl)
Line 959:
 
real 0m13,252s</pre>
 
=={{header|Perl}}==
{{trans|Raku}}
<lang perl>use strict;
use warnings;
use feature 'say';
use List::Util qw(max sum);
 
my ( $count, $i, $pow, $digits, $offset, $lastSelf, $done, @selfs)
= ( 0, 1, 10, 1, 9, 0, 0 );
 
my $final = 1000;
 
while () {
my $isSelf = 1;
my $sum = my $start = sum split //, max(($i-$offset), 0);
for ( my $j = $start; $j < $i; $j++ ) {
if ($j+$sum == $i) { $isSelf = 0 ; last }
($j+1)%10 != 0 ? $sum++ : ( $sum = sum split '', ($j+1) );
}
 
if ($isSelf) {
$count++;
$lastSelf = $i;
push @selfs, $i;
last if @selfs == $final;
}
 
$i++;
next unless $i%$pow == 0;
$pow *= 10;
$offset = 9 * $digits++
}
 
say "The first 50 self numbers are:\n" . join ' ', @selfs;</lang>
{{out}}
<pre>The first 50 self numbers are:
1 3 5 7 9 20 31 42 53 64 75 86 97 108 110 121 132 143 154 165 176 187 198 209 211 222 233 244 255 266 277 288 299 310 312 323 334 345 356 367 378 389 400 411 413 424 435 446 457 468</pre>
 
=={{header|Phix}}==
2,392

edits