aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2019-08-05 09:56:21 +0100
committerRoger Bell_West <roger@firedrake.org>2019-08-05 09:56:21 +0100
commitb6d6668542e8726a1336cccedafa694f474e8e34 (patch)
treead656b1d53aef2000d9b69b58d7d66403e2fef86
parent9cd51ef37c07ca4e36440943b6e72e92e51e667a (diff)
downloadperlweeklychallenge-club-b6d6668542e8726a1336cccedafa694f474e8e34.tar.gz
perlweeklychallenge-club-b6d6668542e8726a1336cccedafa694f474e8e34.tar.bz2
perlweeklychallenge-club-b6d6668542e8726a1336cccedafa694f474e8e34.zip
Solutions to challenge 20
-rwxr-xr-xchallenge-020/roger-bell-west/perl5/ch-1.pl14
-rwxr-xr-xchallenge-020/roger-bell-west/perl5/ch-2.pl29
-rwxr-xr-xchallenge-020/roger-bell-west/perl6/ch-1.p69
-rwxr-xr-xchallenge-020/roger-bell-west/perl6/ch-2.p632
4 files changed, 84 insertions, 0 deletions
diff --git a/challenge-020/roger-bell-west/perl5/ch-1.pl b/challenge-020/roger-bell-west/perl5/ch-1.pl
new file mode 100755
index 0000000000..5816299fbe
--- /dev/null
+++ b/challenge-020/roger-bell-west/perl5/ch-1.pl
@@ -0,0 +1,14 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use List::Util qw(pairmap);
+
+foreach my $in (@ARGV) {
+ print join(' ',splitchange($in)),"\n";
+}
+
+sub splitchange {
+ return pairmap {$a.$b} shift =~ /(.)(\g1*)/g;
+}
diff --git a/challenge-020/roger-bell-west/perl5/ch-2.pl b/challenge-020/roger-bell-west/perl5/ch-2.pl
new file mode 100755
index 0000000000..36ab4ba1c2
--- /dev/null
+++ b/challenge-020/roger-bell-west/perl5/ch-2.pl
@@ -0,0 +1,29 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use Math::BigInt lib => 'GMP';
+use Math::Prime::Util qw(divisors);
+use List::Util qw(sum);
+
+my $a=Math::BigInt->new(1);
+while (1) {
+ $a++;
+ my @a=grep {$_ != $a} divisors($a);
+ unless (@a) {
+ next;
+ }
+ my $b=sum(@a);
+ if ($b <= $a) {
+ next;
+ }
+ my @b=grep {$_ != $b} divisors($b);
+ unless (@b) {
+ next;
+ }
+ my $aa=sum(@b);
+ if ($aa == $a) {
+ print "$a, $b\n";
+ }
+}
diff --git a/challenge-020/roger-bell-west/perl6/ch-1.p6 b/challenge-020/roger-bell-west/perl6/ch-1.p6
new file mode 100755
index 0000000000..f369c23c39
--- /dev/null
+++ b/challenge-020/roger-bell-west/perl6/ch-1.p6
@@ -0,0 +1,9 @@
+#! /usr/bin/perl6
+
+for @*ARGS -> $in {
+ say join(' ',splitchange($in));
+}
+
+sub splitchange ($in) {
+ return map {$_.Str}, $in ~~ m:g/(.) {} :my $c = $0; ($c*)/;
+}
diff --git a/challenge-020/roger-bell-west/perl6/ch-2.p6 b/challenge-020/roger-bell-west/perl6/ch-2.p6
new file mode 100755
index 0000000000..9f095df46b
--- /dev/null
+++ b/challenge-020/roger-bell-west/perl6/ch-2.p6
@@ -0,0 +1,32 @@
+#! /usr/bin/perl6
+
+my $a=1;
+while (1) {
+ $a++;
+ my @a=divisors_unself($a);
+ unless (@a) {
+ next;
+ }
+ my $b=@a.sum;
+ if ($b <= $a) {
+ next;
+ }
+ my @b=divisors_unself($b);
+ unless (@b) {
+ next;
+ }
+ my $aa=@b.sum;
+ if ($aa == $a) {
+ print "$a, $b\n";
+ }
+}
+
+sub divisors_unself ($k) {
+ my @d=(1);
+ for 2..$k/2.Int -> $d {
+ if ($k % $d == 0) {
+ push @d,$d;
+ }
+ }
+ return @d;
+} \ No newline at end of file