diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-07-25 02:09:09 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-25 02:09:09 +0100 |
| commit | 30d0ef078357bf1b1f3485f770a6b0124006c720 (patch) | |
| tree | 7e40f468c8178b19573e34cef74798a7c6fcd137 | |
| parent | f6657c88e0bcf278fb109c9041dcd528f52141bd (diff) | |
| parent | 98b03ccd70f481c1fd961f65e4208f55706c7a86 (diff) | |
| download | perlweeklychallenge-club-30d0ef078357bf1b1f3485f770a6b0124006c720.tar.gz perlweeklychallenge-club-30d0ef078357bf1b1f3485f770a6b0124006c720.tar.bz2 perlweeklychallenge-club-30d0ef078357bf1b1f3485f770a6b0124006c720.zip | |
Merge pull request #4588 from arnesom/branch-for-challenge-122
Arne Sommer
17 files changed, 429 insertions, 0 deletions
diff --git a/challenge-122/arne-sommer/blog.txt b/challenge-122/arne-sommer/blog.txt new file mode 100644 index 0000000000..5591464a15 --- /dev/null +++ b/challenge-122/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/of-points.html diff --git a/challenge-122/arne-sommer/perl/average-of-stream-2-perl b/challenge-122/arne-sommer/perl/average-of-stream-2-perl new file mode 100755 index 0000000000..f8dd83355b --- /dev/null +++ b/challenge-122/arne-sommer/perl/average-of-stream-2-perl @@ -0,0 +1,37 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use Getopt::Long; +use Scalar::Util qw(looks_like_number); + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +die "Please specify a list of numbers" unless @ARGV; + +my $sum = 0; +my $count = 0; + +my @result; +my @verbose; + +for my $current (@ARGV) +{ + die "$current: Not a numeric value" unless looks_like_number($current); + + $sum += $current; + + my $avg = $sum / ++$count; + push(@result, $avg); + + push(@verbose, "Average of first " . + ( $count == 1 ? "number" : "$count numbers" ) . + " (" . join("+", @ARGV[0 .. $count -1]) . ")/$count = $avg") if $verbose; +} + +$verbose && say $_ for @verbose; + +say join(", ", @result); diff --git a/challenge-122/arne-sommer/perl/average-of-stream-perl b/challenge-122/arne-sommer/perl/average-of-stream-perl new file mode 100755 index 0000000000..c7d42b0184 --- /dev/null +++ b/challenge-122/arne-sommer/perl/average-of-stream-perl @@ -0,0 +1,31 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use Getopt::Long; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +die "Please specify a list of numbers" unless @ARGV; + +my $sum = 0; +my $count = 0; + +my @result; + +for my $current (@ARGV) +{ + $sum += $current; + + my $avg = $sum / ++$count; + push(@result, $avg); + + say "Average of first " . + ( $count == 1 ? "number" : "$count numbers" ) . + " (" . join("+", @ARGV[0 .. $count -1]) . ")/$count = $avg" if $verbose; +} + +say join(", ", @result); diff --git a/challenge-122/arne-sommer/perl/basketball-points-ifs-perl b/challenge-122/arne-sommer/perl/basketball-points-ifs-perl new file mode 100755 index 0000000000..af2be024fd --- /dev/null +++ b/challenge-122/arne-sommer/perl/basketball-points-ifs-perl @@ -0,0 +1,25 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; + +no warnings qw(experimental::signatures); + +my $S = $ARGV[0] // die "Please specify a positive integer"; + +recurse($S); + +sub recurse ($left, @points) +{ + if ($left == 0) + { + say join(" ", @points); + return; + } + + recurse($left - 1, @points, 1) if $left >= 1; + recurse($left - 2, @points, 2) if $left >= 2; + recurse($left - 3, @points, 3) if $left >= 3; +} diff --git a/challenge-122/arne-sommer/perl/basketball-points-loop-perl b/challenge-122/arne-sommer/perl/basketball-points-loop-perl new file mode 100755 index 0000000000..73aa51d6dc --- /dev/null +++ b/challenge-122/arne-sommer/perl/basketball-points-loop-perl @@ -0,0 +1,29 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +use Getopt::Long; + +no warnings qw(experimental::signatures); + +my $upper = 3; + +GetOptions("upper=i" => \$upper); + +die "--upper must be > 0" if $upper < 1; + +my $S = $ARGV[0] // die "Please specify a positive integer"; + +recurse($S); + +sub recurse ($left, @points) +{ + $left == 0 && ( say join(" ", @points) ) && return; + + for my $step (1 .. $upper) + { + recurse($left - $step, @points, $step) if $left >= $step; + } +} diff --git a/challenge-122/arne-sommer/perl/basketball-points-queue-perl b/challenge-122/arne-sommer/perl/basketball-points-queue-perl new file mode 100755 index 0000000000..14700afffc --- /dev/null +++ b/challenge-122/arne-sommer/perl/basketball-points-queue-perl @@ -0,0 +1,41 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +use Getopt::Long; + +no warnings qw(experimental::signatures); + +my $upper = 3; + +GetOptions("upper=i" => \$upper); + +die "--upper must be > 0" if $upper < 1; + +my $S = $ARGV[0] // die "Please specify a positive integer"; + +my @queue; + +my @first = ($S); + +push(@queue, \@first); + +while (@queue) +{ + my $curr = shift(@queue); + + my ($left, @points) = @$curr; + + $left == 0 && ( say join(" ", @points) ) && next; + + for my $step (1 .. $upper) + { + if ($left >= $step) + { + my @p = ($left - $step, @points, $step); + push(@queue, \@p); + } + } +} diff --git a/challenge-122/arne-sommer/perl/basketball-points-stack-perl b/challenge-122/arne-sommer/perl/basketball-points-stack-perl new file mode 100755 index 0000000000..d4abf130e1 --- /dev/null +++ b/challenge-122/arne-sommer/perl/basketball-points-stack-perl @@ -0,0 +1,41 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +use Getopt::Long; + +no warnings qw(experimental::signatures); + +my $upper = 3; + +GetOptions("upper=i" => \$upper); + +die "--upper must be > 0" if $upper < 1; + +my $S = $ARGV[0] // die "Please specify a positive integer"; + +my @queue; + +my @first = ($S); + +push(@queue, \@first); + +while (@queue) +{ + my $curr = shift(@queue); + + my ($left, @points) = @$curr; + + $left == 0 && ( say join(" ", @points) ) && next; + + for my $step (reverse (1 .. $upper)) + { + if ($left >= $step) + { + my @p = ($left - $step, @points, $step); + unshift(@queue, \@p); + } + } +} diff --git a/challenge-122/arne-sommer/perl/ch-1.pl b/challenge-122/arne-sommer/perl/ch-1.pl new file mode 100755 index 0000000000..f8dd83355b --- /dev/null +++ b/challenge-122/arne-sommer/perl/ch-1.pl @@ -0,0 +1,37 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use Getopt::Long; +use Scalar::Util qw(looks_like_number); + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +die "Please specify a list of numbers" unless @ARGV; + +my $sum = 0; +my $count = 0; + +my @result; +my @verbose; + +for my $current (@ARGV) +{ + die "$current: Not a numeric value" unless looks_like_number($current); + + $sum += $current; + + my $avg = $sum / ++$count; + push(@result, $avg); + + push(@verbose, "Average of first " . + ( $count == 1 ? "number" : "$count numbers" ) . + " (" . join("+", @ARGV[0 .. $count -1]) . ")/$count = $avg") if $verbose; +} + +$verbose && say $_ for @verbose; + +say join(", ", @result); diff --git a/challenge-122/arne-sommer/perl/ch-2.pl b/challenge-122/arne-sommer/perl/ch-2.pl new file mode 100755 index 0000000000..73aa51d6dc --- /dev/null +++ b/challenge-122/arne-sommer/perl/ch-2.pl @@ -0,0 +1,29 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +use Getopt::Long; + +no warnings qw(experimental::signatures); + +my $upper = 3; + +GetOptions("upper=i" => \$upper); + +die "--upper must be > 0" if $upper < 1; + +my $S = $ARGV[0] // die "Please specify a positive integer"; + +recurse($S); + +sub recurse ($left, @points) +{ + $left == 0 && ( say join(" ", @points) ) && return; + + for my $step (1 .. $upper) + { + recurse($left - $step, @points, $step) if $left >= $step; + } +} diff --git a/challenge-122/arne-sommer/raku/average-of-stream b/challenge-122/arne-sommer/raku/average-of-stream new file mode 100755 index 0000000000..2e89e6d642 --- /dev/null +++ b/challenge-122/arne-sommer/raku/average-of-stream @@ -0,0 +1,21 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@N where all(@N) ~~ Numeric, :v(:$verbose)); + +my $sum = 0; +my $count = 0; + +my @result; + +for @N -> $current +{ + $sum += $current; + + my $avg = $sum / ++$count; + @result.push: $avg; + + say "Average of first { $count == 1 ?? "number" !! "$count numbers" } ({ @N[^$count].join("+") })/$count = $avg" if $verbose; + +} + +say @result.join(", "); diff --git a/challenge-122/arne-sommer/raku/basketball-points-ifs b/challenge-122/arne-sommer/raku/basketball-points-ifs new file mode 100755 index 0000000000..f4e81815bc --- /dev/null +++ b/challenge-122/arne-sommer/raku/basketball-points-ifs @@ -0,0 +1,35 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt $S, :v(:$verbose)); + +recurse( (), $S); + +sub recurse (@points, $left) +{ + if $left == 0 + { + say @points.join(" "); + return; + } + + if $left >= 1 + { + my @p = @points.clone; + @p.push: 1; + recurse(@p, $left -1); + } + + if $left >= 2 + { + my @p = @points.clone; + @p.push: 2; + recurse(@p, $left -2); + } + + if $left >= 3 + { + my @p = @points.clone; + @p.push: 3; + recurse(@p, $left -3); + } +} diff --git a/challenge-122/arne-sommer/raku/basketball-points-ifs-2 b/challenge-122/arne-sommer/raku/basketball-points-ifs-2 new file mode 100755 index 0000000000..45d5f32aa8 --- /dev/null +++ b/challenge-122/arne-sommer/raku/basketball-points-ifs-2 @@ -0,0 +1,14 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt $S, :v(:$verbose)); + +recurse( (), $S); + +sub recurse (@points, $left) +{ + $left == 0 && @points.join(" ").say && return; + + recurse((@points, 1).flat, $left -1) if $left >= 1; + recurse((@points, 2).flat, $left -2) if $left >= 2; + recurse((@points, 3).flat, $left -3) if $left >= 3; +} diff --git a/challenge-122/arne-sommer/raku/basketball-points-loop b/challenge-122/arne-sommer/raku/basketball-points-loop new file mode 100755 index 0000000000..f5e9de9be1 --- /dev/null +++ b/challenge-122/arne-sommer/raku/basketball-points-loop @@ -0,0 +1,15 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt $S, :v(:$verbose), UInt :u(:$upper) where $upper > 1 = 3); + +recurse( (), $S); + +sub recurse (@points, $left) +{ + $left == 0 && @points.join(" ").say && return; + + for 1 .. $upper -> $step + { + recurse((@points, $step).flat, $left - $step) if $left >= $step; + } +} diff --git a/challenge-122/arne-sommer/raku/basketball-points-queue b/challenge-122/arne-sommer/raku/basketball-points-queue new file mode 100755 index 0000000000..b719e0fd38 --- /dev/null +++ b/challenge-122/arne-sommer/raku/basketball-points-queue @@ -0,0 +1,19 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt $S, :v(:$verbose), UInt :u(:$upper) where $upper > 1 = 3); + +my @queue = ( ( (), $S), ); + +while @queue +{ + my $curr = @queue.shift; + my @points = $curr[0]; + my $left = $curr[1]; + + $left == 0 && @points.join(" ").say && next; + + for 1 .. $upper -> $step + { + @queue.push: ((@points, $step).flat, $left - $step) if $left >= $step; + } +} diff --git a/challenge-122/arne-sommer/raku/basketball-points-stack b/challenge-122/arne-sommer/raku/basketball-points-stack new file mode 100755 index 0000000000..83b775d998 --- /dev/null +++ b/challenge-122/arne-sommer/raku/basketball-points-stack @@ -0,0 +1,19 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt $S, :v(:$verbose), UInt :u(:$upper) where $upper > 1 = 3); + +my @stack = ( ( (), $S), ); + +while @stack +{ + my $curr = @stack.shift; + my @points = $curr[0]; + my $left = $curr[1]; + + $left == 0 && @points.join(" ").say && next; + + for $upper ... 1 -> $step + { + @stack.unshift: ((@points, $step).flat, $left - $step) if $left >= $step; + } +} diff --git a/challenge-122/arne-sommer/raku/ch-1.raku b/challenge-122/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..2e89e6d642 --- /dev/null +++ b/challenge-122/arne-sommer/raku/ch-1.raku @@ -0,0 +1,21 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@N where all(@N) ~~ Numeric, :v(:$verbose)); + +my $sum = 0; +my $count = 0; + +my @result; + +for @N -> $current +{ + $sum += $current; + + my $avg = $sum / ++$count; + @result.push: $avg; + + say "Average of first { $count == 1 ?? "number" !! "$count numbers" } ({ @N[^$count].join("+") })/$count = $avg" if $verbose; + +} + +say @result.join(", "); diff --git a/challenge-122/arne-sommer/raku/ch-2.raku b/challenge-122/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..45d5f32aa8 --- /dev/null +++ b/challenge-122/arne-sommer/raku/ch-2.raku @@ -0,0 +1,14 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt $S, :v(:$verbose)); + +recurse( (), $S); + +sub recurse (@points, $left) +{ + $left == 0 && @points.join(" ").say && return; + + recurse((@points, 1).flat, $left -1) if $left >= 1; + recurse((@points, 2).flat, $left -2) if $left >= 2; + recurse((@points, 3).flat, $left -3) if $left >= 3; +} |
