aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-07-25 23:38:42 +0100
committerGitHub <noreply@github.com>2021-07-25 23:38:42 +0100
commit3ed3623c0d6d3f378626f0bee6b2b38c0c7a7679 (patch)
tree0ffc662e276a27ae16a2ab3c836922be4ba977ab
parent9b8f1f2164117210fe85516a845e5c27af0a58d4 (diff)
parent5753a979113262ac3299911a8b3997887d705362 (diff)
downloadperlweeklychallenge-club-3ed3623c0d6d3f378626f0bee6b2b38c0c7a7679.tar.gz
perlweeklychallenge-club-3ed3623c0d6d3f378626f0bee6b2b38c0c7a7679.tar.bz2
perlweeklychallenge-club-3ed3623c0d6d3f378626f0bee6b2b38c0c7a7679.zip
Merge pull request #4597 from Util/branch-for-challenge-122
Add Raku and Perl solutions for #122 by Bruce Gray.
-rw-r--r--challenge-122/bruce-gray/perl/ch-1.pl32
-rw-r--r--challenge-122/bruce-gray/perl/ch-2.pl20
-rw-r--r--challenge-122/bruce-gray/raku/ch-1.raku10
-rw-r--r--challenge-122/bruce-gray/raku/ch-2.raku18
4 files changed, 80 insertions, 0 deletions
diff --git a/challenge-122/bruce-gray/perl/ch-1.pl b/challenge-122/bruce-gray/perl/ch-1.pl
new file mode 100644
index 0000000000..70beafbe8f
--- /dev/null
+++ b/challenge-122/bruce-gray/perl/ch-1.pl
@@ -0,0 +1,32 @@
+use strict;
+use warnings;
+use 5.020;
+use experimental qw<signatures>;
+
+sub make_arithmetic_generator ( $start, $increment ) {
+ my $last = $start - $increment;
+ return sub {
+ return ( $last += $increment );
+ };
+}
+sub running_average_generator ( $code_for_next_input ) {
+ my ($sum, $count);
+ return sub {
+ return ( $sum += $code_for_next_input->() ) / ++$count;
+ };
+}
+
+my $stream_next = make_arithmetic_generator( 10, 10 );
+my $avg_next = running_average_generator( $stream_next );
+my $count_wanted = 20;
+while ( defined( my $avg = $avg_next->() ) and $count_wanted-- ) {
+ say $avg;
+}
+
+# I would have just used this code,
+# but the task specifies "stream", not "list" or "array"!
+# sub running_average ( @s ) {
+# my ( $sum, $count );
+# return map { ($sum += $_) / ++$count } @s;
+# }
+# say for running_average( map { $_ * 10 } 1..20 );
diff --git a/challenge-122/bruce-gray/perl/ch-2.pl b/challenge-122/bruce-gray/perl/ch-2.pl
new file mode 100644
index 0000000000..f537de2105
--- /dev/null
+++ b/challenge-122/bruce-gray/perl/ch-2.pl
@@ -0,0 +1,20 @@
+use strict;
+use warnings;
+use 5.024;
+use experimental qw<signatures>;
+
+sub bball_ways ( $S ) {
+ use constant SHOT_VALUES => [ 1, 2, 3 ];
+ return [] if $S == 0;
+ return if $S < 0;
+
+ my @ret;
+
+ for my $n ( SHOT_VALUES->@* ) {
+ push @ret, map [ $n, @{$_} ], bball_ways($S - $n);
+ }
+
+ return @ret;
+}
+
+say join(' ', @{$_}) for bball_ways( $ARGV[0] );
diff --git a/challenge-122/bruce-gray/raku/ch-1.raku b/challenge-122/bruce-gray/raku/ch-1.raku
new file mode 100644
index 0000000000..a96e47f57b
--- /dev/null
+++ b/challenge-122/bruce-gray/raku/ch-1.raku
@@ -0,0 +1,10 @@
+# sub ra { ( [\+] @^s ) Z/ ( 1 .. * ) }
+
+sub running_average ( @s ) {
+ constant @running_count = 1 .. *;
+ my @running_sum = [\+] @s;
+
+ return @running_sum Z/ @running_count;
+}
+
+put running_average( 10, 20 … * ).head(25);
diff --git a/challenge-122/bruce-gray/raku/ch-2.raku b/challenge-122/bruce-gray/raku/ch-2.raku
new file mode 100644
index 0000000000..e424a47ade
--- /dev/null
+++ b/challenge-122/bruce-gray/raku/ch-2.raku
@@ -0,0 +1,18 @@
+sub b'ball-ways ( UInt:D $S ) {
+ constant @SHOT_VALUES = 1, 2, 3;
+ return if $S == 0;
+
+ return gather for @SHOT_VALUES -> $n {
+ next if $S - $n < 0;
+
+ if b'ball-ways($S - $n) -> @ways {
+ take ($n, |.list) for @ways;
+ }
+ else {
+ take ($n,);
+ }
+ }
+}
+
+unit sub MAIN ( UInt:D $final_score );
+.put for b'ball-ways( $final_score );