Lychrel numbers: Difference between revisions

m
→‎{{header|Perl}}: modernize code & speed up with Math::AnyNum
(Added Wren)
m (→‎{{header|Perl}}: modernize code & speed up with Math::AnyNum)
Line 2,455:
=={{header|Perl}}==
<lang perl>use strict;
use warnings;
use English;
use bigint;
use Const::Fast;
use Math::AnyNum qw(:overload);
 
const my $n_max => 10_000;
const my $iter_cutoff => 500;
grep {is_palindromemy($ARG)}@seq_dump, (@seed_lychrels, @related_lychrels)),;
 
my @seq_dump = ();
my @seed_lychrels = ();
my @related_lychrels = ();
for (my $n=1; $n<=$n_max; $n++) {
my @seq = lychrel_sequence($n);
if (scalar(@seq)iter_cutoff == $iter_cutoffscalar @seq) {
if (has_overlap(\@seq, \@seq_dump)) { push @related_lychrels, $n }
else { push @related_lychrelsseed_lychrels, $n; }
}
else {
push @seed_lychrels, $n;
}
@seq_dump = set_union(\@seq_dump, \@seq);
}
}
 
print "Number of seed Lychrels <= $n_max: ", scalar(@seed_lychrels), "\n";
printprintf "Seed%45s %s\n", "Number of seed Lychrels <= $n_max: ", join(q{, }, scalar @seed_lychrels), "\n";
printprintf "Number%45s of%s\n", related"Seed Lychrels <= $n_max: ", scalar(@related_lychrels) join ', "\n"', @seed_lychrels;
printprintf "Palindromes%45s among%s\n", seed"Number andof related Lychrels <= $n_max: ", scalar @related_lychrels;
printf "%45s %s\n", "Palindromes among seed and related <= 10000$n_max: 4994", 8778, 9999
join(q{, },
join ', ', sort {$a <=> $b} grep { is_palindrome($ARG) } @seed_lychrels, @related_lychrels;
grep {is_palindrome($ARG)} (@seed_lychrels, @related_lychrels)),
"\n";
exit 0;
 
sub lychrel_sequence {
my $n = shift;
my @seq = ();
for (1 .. $iter_cutoff) {
return if is_palindrome($n = next_n($n));
ifpush @seq, (is_palindrome($n)) { return (); }
else { push @seq, $n; }
}
return @seq;
}
 
sub next_n { my $n = shift; $n + reverse($n) }
sub is_palindrome { my $n = shift; $n eq reverse($n) }
return $n + reverse($n . q{});
}
 
sub is_palindrome {
my $n = shift;
return $n eq reverse($n . q{});
}
 
sub has_overlap {
my ($a, $b) = @ARG;
my %h;
foreach my $k (@h{$a_})++ {for $h@{$ka}++; }
foreach myexists $k (@h{$b_}) {and return 1 iffor exists $h@{$kb}; }
return 0;
}
 
Line 2,519 ⟶ 2,503:
my ($a, $b) = @ARG;
my %h;
foreach$h{$_}++ myfor $k (@{$a}), @{ $h{$kb}++; }
keys %h;
foreach my $k (@{$b}) { $h{$k}++; }
return keys(%h);
}</lang>
{{out}}
<pre> Number of relatedseed Lychrels <= 10000: 2445
<pre>
Number of seed Seed Lychrels <= 10000: 5196, 879, 1997, 7059, 9999
Seed Number of related Lychrels <= 10000: 196, 879, 1997, 7059, 9999244
Palindromes among seed and related <= 10000: 4994, 8778, 9999</pre>
Number of related Lychrels <= 10000: 244
Palindromes among seed and related <= 10000: 4994, 8778, 9999
</pre>
 
=={{header|Phix}}==
2,392

edits