aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2022-07-04 00:06:42 +0200
committerarnesom <arne@bbop.org>2022-07-04 00:06:42 +0200
commitad1757a7ef987f1a3fb80d992893a9ac6f19293f (patch)
tree4fbba72c74228d46d7eafdc3b9573c8d51e7453e
parentabfef7592734e287dd19907b72f8cfd1f0fad918 (diff)
downloadperlweeklychallenge-club-ad1757a7ef987f1a3fb80d992893a9ac6f19293f.tar.gz
perlweeklychallenge-club-ad1757a7ef987f1a3fb80d992893a9ac6f19293f.tar.bz2
perlweeklychallenge-club-ad1757a7ef987f1a3fb80d992893a9ac6f19293f.zip
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);
+
+