aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-07-04 00:55:20 +0100
committerGitHub <noreply@github.com>2022-07-04 00:55:20 +0100
commitdbcdd395ebcfd81f33ba905e74baffc114d3a2d2 (patch)
tree93b0e9256b37faf2d3fc0d4492dc0fd71681d6f6
parent8438146172867a51b907105d069a87331b47b97b (diff)
parentad1757a7ef987f1a3fb80d992893a9ac6f19293f (diff)
downloadperlweeklychallenge-club-dbcdd395ebcfd81f33ba905e74baffc114d3a2d2.tar.gz
perlweeklychallenge-club-dbcdd395ebcfd81f33ba905e74baffc114d3a2d2.tar.bz2
perlweeklychallenge-club-dbcdd395ebcfd81f33ba905e74baffc114d3a2d2.zip
Merge pull request #6385 from arnesom/branch-for-challenge-171
Arne Sommer
-rw-r--r--challenge-171/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-171/arne-sommer/raku/abundant-number27
-rwxr-xr-xchallenge-171/arne-sommer/raku/ch-1.raku27
-rwxr-xr-xchallenge-171/arne-sommer/raku/ch-2.raku31
-rwxr-xr-xchallenge-171/arne-sommer/raku/first-class-function31
5 files changed, 117 insertions, 0 deletions
diff --git a/challenge-171/arne-sommer/blog.txt b/challenge-171/arne-sommer/blog.txt
new file mode 100644
index 0000000000..ad24babe59
--- /dev/null
+++ b/challenge-171/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/abundantly-first-class.html
diff --git a/challenge-171/arne-sommer/raku/abundant-number b/challenge-171/arne-sommer/raku/abundant-number
new file mode 100755
index 0000000000..b7e8b2c4e7
--- /dev/null
+++ b/challenge-171/arne-sommer/raku/abundant-number
@@ -0,0 +1,27 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int :c(:$count) where $count > 0 = 20, :v(:$verbose));
+
+my $abundant := (1 .. Inf).grep( *.&is-abundant );
+
+say $abundant[^$count].join(", ");
+
+sub divisors ($number, :$not-self, :$not-one)
+{
+ my @divisors;
+
+ for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate
+ {
+ @divisors.push: $candidate if $number %% $candidate;
+ }
+
+ @divisors.push: $number unless $not-self;
+ say ": $number -> @divisors[] = { @divisors.sum }" if $verbose;
+ return @divisors;
+}
+
+sub is-abundant ($number)
+{
+ return $number % 2 && divisors($number, :not-self).sum > $number;
+ # return $number % 2 && divisors($number).sum > $number * 2;
+}
diff --git a/challenge-171/arne-sommer/raku/ch-1.raku b/challenge-171/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..b7e8b2c4e7
--- /dev/null
+++ b/challenge-171/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,27 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int :c(:$count) where $count > 0 = 20, :v(:$verbose));
+
+my $abundant := (1 .. Inf).grep( *.&is-abundant );
+
+say $abundant[^$count].join(", ");
+
+sub divisors ($number, :$not-self, :$not-one)
+{
+ my @divisors;
+
+ for ($not-one ?? 2 !! 1) .. $number/2 -> $candidate
+ {
+ @divisors.push: $candidate if $number %% $candidate;
+ }
+
+ @divisors.push: $number unless $not-self;
+ say ": $number -> @divisors[] = { @divisors.sum }" if $verbose;
+ return @divisors;
+}
+
+sub is-abundant ($number)
+{
+ return $number % 2 && divisors($number, :not-self).sum > $number;
+ # return $number % 2 && divisors($number).sum > $number * 2;
+}
diff --git a/challenge-171/arne-sommer/raku/ch-2.raku b/challenge-171/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..1b20bfbba7
--- /dev/null
+++ b/challenge-171/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,31 @@
+#! /usr/bin/env raku
+
+my $f = sub f ($val)
+{
+ return $val * 10;
+}
+
+my $g = sub g ($val)
+{
+ return $val + 1;
+}
+
+sub compose(&f, &g)
+{
+ return sub ($arg)
+ {
+ &f(&g($arg));
+ };
+}
+
+my $h = compose($f, $g);
+
+say $h(12);
+say $h(13);
+
+my $m = compose($g, $f);
+
+say $m(12);
+say $m(13);
+
+
diff --git a/challenge-171/arne-sommer/raku/first-class-function b/challenge-171/arne-sommer/raku/first-class-function
new file mode 100755
index 0000000000..1b20bfbba7
--- /dev/null
+++ b/challenge-171/arne-sommer/raku/first-class-function
@@ -0,0 +1,31 @@
+#! /usr/bin/env raku
+
+my $f = sub f ($val)
+{
+ return $val * 10;
+}
+
+my $g = sub g ($val)
+{
+ return $val + 1;
+}
+
+sub compose(&f, &g)
+{
+ return sub ($arg)
+ {
+ &f(&g($arg));
+ };
+}
+
+my $h = compose($f, $g);
+
+say $h(12);
+say $h(13);
+
+my $m = compose($g, $f);
+
+say $m(12);
+say $m(13);
+
+