aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-07-25 02:09:09 +0100
committerGitHub <noreply@github.com>2021-07-25 02:09:09 +0100
commit30d0ef078357bf1b1f3485f770a6b0124006c720 (patch)
tree7e40f468c8178b19573e34cef74798a7c6fcd137
parentf6657c88e0bcf278fb109c9041dcd528f52141bd (diff)
parent98b03ccd70f481c1fd961f65e4208f55706c7a86 (diff)
downloadperlweeklychallenge-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
-rw-r--r--challenge-122/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-122/arne-sommer/perl/average-of-stream-2-perl37
-rwxr-xr-xchallenge-122/arne-sommer/perl/average-of-stream-perl31
-rwxr-xr-xchallenge-122/arne-sommer/perl/basketball-points-ifs-perl25
-rwxr-xr-xchallenge-122/arne-sommer/perl/basketball-points-loop-perl29
-rwxr-xr-xchallenge-122/arne-sommer/perl/basketball-points-queue-perl41
-rwxr-xr-xchallenge-122/arne-sommer/perl/basketball-points-stack-perl41
-rwxr-xr-xchallenge-122/arne-sommer/perl/ch-1.pl37
-rwxr-xr-xchallenge-122/arne-sommer/perl/ch-2.pl29
-rwxr-xr-xchallenge-122/arne-sommer/raku/average-of-stream21
-rwxr-xr-xchallenge-122/arne-sommer/raku/basketball-points-ifs35
-rwxr-xr-xchallenge-122/arne-sommer/raku/basketball-points-ifs-214
-rwxr-xr-xchallenge-122/arne-sommer/raku/basketball-points-loop15
-rwxr-xr-xchallenge-122/arne-sommer/raku/basketball-points-queue19
-rwxr-xr-xchallenge-122/arne-sommer/raku/basketball-points-stack19
-rwxr-xr-xchallenge-122/arne-sommer/raku/ch-1.raku21
-rwxr-xr-xchallenge-122/arne-sommer/raku/ch-2.raku14
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;
+}