aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-238/barroff/perl/ch-1.pl34
-rw-r--r--challenge-238/barroff/raku/ch-1.p630
2 files changed, 64 insertions, 0 deletions
diff --git a/challenge-238/barroff/perl/ch-1.pl b/challenge-238/barroff/perl/ch-1.pl
new file mode 100644
index 0000000000..f48034cc7e
--- /dev/null
+++ b/challenge-238/barroff/perl/ch-1.pl
@@ -0,0 +1,34 @@
+#!/usr/bin/env perl
+
+use v5.38;
+
+use List::Util qw/sum/;
+
+sub running_sum ( $rs, @ints ) {
+ return $rs + $ints[0] if @ints == 1;
+ return (
+ ( $rs + $ints[0], running_sum( $rs + $ints[0], @ints[ 1 .. $#ints ] ) )
+ );
+}
+
+sub MAIN() {
+ if (@ARGV) {
+
+ #| Run command line arguments
+ say running_sum(@ARGV);
+ }
+ else {
+ #| Run test cases
+ use Test2::V0 qw( is plan );
+ plan 3;
+
+ is eval 'join " ", running_sum(0, ( 1, 2, 3, 4, 5 ) )',
+ '1 3 6 10 15', 'works for (1, 2, 3, 4, 5)';
+ is eval 'join " ", running_sum(0, ( 1, 1, 1, 1, 1 ) )',
+ '1 2 3 4 5', 'works for (1, 1, 1, 1, 1)';
+ is eval 'join " ", running_sum(0, ( 0, -1, 1, 2) )',
+ '0 -1 0 2', 'works for (0, -1, 1, 2)';
+ }
+}
+
+MAIN();
diff --git a/challenge-238/barroff/raku/ch-1.p6 b/challenge-238/barroff/raku/ch-1.p6
new file mode 100644
index 0000000000..965d6ccc06
--- /dev/null
+++ b/challenge-238/barroff/raku/ch-1.p6
@@ -0,0 +1,30 @@
+#!/usr/bin/env raku
+
+use v6.d;
+
+sub running-sum(@ints, Int:D $rs = 0 --> Positional:D) {
+ given @ints.elems {
+ when 1 { return [@ints[0] + $rs] }
+ default { my $new_rs = @ints[0] + $rs;
+ return [$new_rs, |running-sum(@ints[1..*], $new_rs)]
+ }
+ }
+}
+
+#| Run test cases
+multi sub MAIN('test') {
+ use Test;
+ plan 3;
+
+ is running-sum([1, 2, 3, 4, 5]), [1, 3, 6, 10, 15],
+ 'works for (1, 2, 3, 4, 5)';
+ is running-sum([1, 1, 1, 1, 1]), [1, 2, 3, 4, 5],
+ 'works for (1, 1, 1, 1, 1)';
+ is running-sum([0, -1, 1, 2]), [0, -1, 0, 2],
+ 'works for (0, -1, 1, 2)';
+}
+
+#| Take user provided list like 1 1 2 2 2 3
+multi sub MAIN(*@ints where @ints.elems ≥ 1) {
+ say running-sum(@ints);
+}