diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-07-25 23:38:42 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-25 23:38:42 +0100 |
| commit | 3ed3623c0d6d3f378626f0bee6b2b38c0c7a7679 (patch) | |
| tree | 0ffc662e276a27ae16a2ab3c836922be4ba977ab | |
| parent | 9b8f1f2164117210fe85516a845e5c27af0a58d4 (diff) | |
| parent | 5753a979113262ac3299911a8b3997887d705362 (diff) | |
| download | perlweeklychallenge-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.pl | 32 | ||||
| -rw-r--r-- | challenge-122/bruce-gray/perl/ch-2.pl | 20 | ||||
| -rw-r--r-- | challenge-122/bruce-gray/raku/ch-1.raku | 10 | ||||
| -rw-r--r-- | challenge-122/bruce-gray/raku/ch-2.raku | 18 |
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 ); |
