aboutsummaryrefslogtreecommitdiff
path: root/challenge-238
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2023-10-12 16:44:38 +0200
committerarnesom <arne@bbop.org>2023-10-12 16:44:38 +0200
commitd7dc12414ef5e9ab8bb6d93e625e7d38d9a3344d (patch)
treecd9ec00550f78ac5c49d077c7819c4e996ab9cd5 /challenge-238
parent3143f9657ea324e7588d575d67c35eb28bc276f3 (diff)
downloadperlweeklychallenge-club-d7dc12414ef5e9ab8bb6d93e625e7d38d9a3344d.tar.gz
perlweeklychallenge-club-d7dc12414ef5e9ab8bb6d93e625e7d38d9a3344d.tar.bz2
perlweeklychallenge-club-d7dc12414ef5e9ab8bb6d93e625e7d38d9a3344d.zip
Arne Sommer
Diffstat (limited to 'challenge-238')
-rw-r--r--challenge-238/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-238/arne-sommer/raku/ch-1.raku7
-rwxr-xr-xchallenge-238/arne-sommer/raku/ch-2.raku27
-rwxr-xr-xchallenge-238/arne-sommer/raku/persistent-sort27
-rwxr-xr-xchallenge-238/arne-sommer/raku/running-sum-gather15
-rwxr-xr-xchallenge-238/arne-sommer/raku/running-sum-map7
-rwxr-xr-xchallenge-238/arne-sommer/raku/running-sum-seq7
-rwxr-xr-xchallenge-238/arne-sommer/raku/running-sum-state7
8 files changed, 98 insertions, 0 deletions
diff --git a/challenge-238/arne-sommer/blog.txt b/challenge-238/arne-sommer/blog.txt
new file mode 100644
index 0000000000..54e4a4fe0b
--- /dev/null
+++ b/challenge-238/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/persistently-running.html
diff --git a/challenge-238/arne-sommer/raku/ch-1.raku b/challenge-238/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..9787e8015c
--- /dev/null
+++ b/challenge-238/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where all(@int) ~~ Int && @int.elems > 0);
+
+my $running-sum := (@int.first, * + @int[1 + state $index++] ... Inf);
+
+say '(' ~ $running-sum[0 .. @int.end].join(", ") ~ ')';
diff --git a/challenge-238/arne-sommer/raku/ch-2.raku b/challenge-238/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..88b9c523cd
--- /dev/null
+++ b/challenge-238/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,27 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where all(@int) ~~ UInt && all(@int) > 0 && @int.elems > 0, :v(:$verbose));
+
+my %steps;
+
+for @int -> $int
+{
+ %steps{$int} = steps($int);
+}
+
+say '(' ~ @int.sort({ %steps{$^a} <=> %steps{$^b} || $^a <=> $^b }).join(', ') ~ ')';
+
+sub steps (Int $int is copy)
+{
+ print ": $int" if $verbose;
+ my $steps = 0;
+ while $int >= 10
+ {
+ my @digits = $int.comb;
+ $int = [*] @digits;
+ print " => { @digits.join(' x ') } => $int" if $verbose;
+ $steps++;
+ }
+ say " ($steps step{ 's' if $steps != 1})" if $verbose;
+ return $steps;
+}
diff --git a/challenge-238/arne-sommer/raku/persistent-sort b/challenge-238/arne-sommer/raku/persistent-sort
new file mode 100755
index 0000000000..88b9c523cd
--- /dev/null
+++ b/challenge-238/arne-sommer/raku/persistent-sort
@@ -0,0 +1,27 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where all(@int) ~~ UInt && all(@int) > 0 && @int.elems > 0, :v(:$verbose));
+
+my %steps;
+
+for @int -> $int
+{
+ %steps{$int} = steps($int);
+}
+
+say '(' ~ @int.sort({ %steps{$^a} <=> %steps{$^b} || $^a <=> $^b }).join(', ') ~ ')';
+
+sub steps (Int $int is copy)
+{
+ print ": $int" if $verbose;
+ my $steps = 0;
+ while $int >= 10
+ {
+ my @digits = $int.comb;
+ $int = [*] @digits;
+ print " => { @digits.join(' x ') } => $int" if $verbose;
+ $steps++;
+ }
+ say " ($steps step{ 's' if $steps != 1})" if $verbose;
+ return $steps;
+}
diff --git a/challenge-238/arne-sommer/raku/running-sum-gather b/challenge-238/arne-sommer/raku/running-sum-gather
new file mode 100755
index 0000000000..d71b09eb72
--- /dev/null
+++ b/challenge-238/arne-sommer/raku/running-sum-gather
@@ -0,0 +1,15 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where all(@int) ~~ Int && @int.elems > 0);
+
+my $running-sum := gather
+{
+ my $sum = 0;
+ for @int -> $current
+ {
+ $sum += $current;
+ take $sum;
+ }
+}
+
+say '(' ~ $running-sum.join(", ") ~ ')';
diff --git a/challenge-238/arne-sommer/raku/running-sum-map b/challenge-238/arne-sommer/raku/running-sum-map
new file mode 100755
index 0000000000..d4d8aaca70
--- /dev/null
+++ b/challenge-238/arne-sommer/raku/running-sum-map
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where all(@int) ~~ Int && @int.elems > 0);
+
+my @running-sum = (^@int.elems).map({ [+] @int[0..$_] } );
+
+say '(' ~ @running-sum.join(", ") ~ ')';
diff --git a/challenge-238/arne-sommer/raku/running-sum-seq b/challenge-238/arne-sommer/raku/running-sum-seq
new file mode 100755
index 0000000000..b63729ab54
--- /dev/null
+++ b/challenge-238/arne-sommer/raku/running-sum-seq
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where all(@int) ~~ Int && @int.elems > 0);
+
+my $running-sum := (@int.first, * + @int[1 + state $index++] ... @int.sum );
+
+say '(' ~ $running-sum.join(", ") ~ ')';
diff --git a/challenge-238/arne-sommer/raku/running-sum-state b/challenge-238/arne-sommer/raku/running-sum-state
new file mode 100755
index 0000000000..9787e8015c
--- /dev/null
+++ b/challenge-238/arne-sommer/raku/running-sum-state
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@int where all(@int) ~~ Int && @int.elems > 0);
+
+my $running-sum := (@int.first, * + @int[1 + state $index++] ... Inf);
+
+say '(' ~ $running-sum[0 .. @int.end].join(", ") ~ ')';