aboutsummaryrefslogtreecommitdiff
path: root/challenge-073
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-08-15 00:01:52 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-08-15 00:01:52 +0100
commit34f2cfddb2425c2c444ee69a121139127c219ece (patch)
treeff6928d1532e655d5ae732b17b0ba67fd99342fe /challenge-073
parent5630d4ba0b2fdd9762cbceb0f276811a5e4f469f (diff)
downloadperlweeklychallenge-club-34f2cfddb2425c2c444ee69a121139127c219ece.tar.gz
perlweeklychallenge-club-34f2cfddb2425c2c444ee69a121139127c219ece.tar.bz2
perlweeklychallenge-club-34f2cfddb2425c2c444ee69a121139127c219ece.zip
- Added solutions by Arne Sommer.
Diffstat (limited to 'challenge-073')
-rw-r--r--challenge-073/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-073/arne-sommer/perl/ch-1.pl25
-rwxr-xr-xchallenge-073/arne-sommer/perl/ch-2.pl29
-rwxr-xr-xchallenge-073/arne-sommer/perl/min-sliding-window-perl25
-rwxr-xr-xchallenge-073/arne-sommer/perl/smallest-neighbour-perl29
-rwxr-xr-xchallenge-073/arne-sommer/raku/ch-1.raku9
-rwxr-xr-xchallenge-073/arne-sommer/raku/ch-2.raku12
-rwxr-xr-xchallenge-073/arne-sommer/raku/min-sliding-window9
-rwxr-xr-xchallenge-073/arne-sommer/raku/min-sliding-window-plain5
-rwxr-xr-xchallenge-073/arne-sommer/raku/smallest-neighbour12
-rwxr-xr-xchallenge-073/arne-sommer/raku/smallest-neighbour-first11
11 files changed, 167 insertions, 0 deletions
diff --git a/challenge-073/arne-sommer/blog.txt b/challenge-073/arne-sommer/blog.txt
new file mode 100644
index 0000000000..20cc755a48
--- /dev/null
+++ b/challenge-073/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/sliding-neighbour.html
diff --git a/challenge-073/arne-sommer/perl/ch-1.pl b/challenge-073/arne-sommer/perl/ch-1.pl
new file mode 100755
index 0000000000..9e43f35bb2
--- /dev/null
+++ b/challenge-073/arne-sommer/perl/ch-1.pl
@@ -0,0 +1,25 @@
+#! /usr/bin/env perl
+
+use strict;
+use feature 'say';
+use Getopt::Long;
+use List::Util 'min';
+use Perl6::Junction 'all';
+
+my $verbose = 0;
+
+GetOptions("verbose" => \$verbose);
+
+die 'Specify $S and @A' unless @ARGV;
+
+my ($S, @A) = @ARGV;
+
+die '$S must be an integer >= 1' unless int($S) == $S && $S >= 1;
+die '@A must contain integers only' unless all(@A) == qr/^\d+$/;
+
+map { say ": (" . join(", ", @A[$_ .. $_ + $S -1]) . ") min -> " . min @A[$_ .. $_ + $S -1] }
+(0 .. @A - $S) if $verbose;
+
+say "(",
+ join (", ", map { min @A[$_ .. $_ + $S -1] } (0 .. @A - $S)),
+ ")";
diff --git a/challenge-073/arne-sommer/perl/ch-2.pl b/challenge-073/arne-sommer/perl/ch-2.pl
new file mode 100755
index 0000000000..8043a49e6b
--- /dev/null
+++ b/challenge-073/arne-sommer/perl/ch-2.pl
@@ -0,0 +1,29 @@
+#! /usr/bin/env perl
+
+use strict;
+use feature 'say';
+use Getopt::Long;
+use List::Util 'min';
+use Perl6::Junction 'all';
+
+my $verbose = 0;
+
+GetOptions("verbose" => \$verbose);
+
+die 'Specify @A' unless @ARGV;
+
+my (@A) = @ARGV;
+
+die '@A must contain integers only' unless all(@A) == qr/^\d+$/;
+
+if ($verbose)
+{
+ say ": index 0 (" . $A[0] . ") -> () -> 0";
+ map { say ": index $_ ($A[$_]) -> (" . join(", ", @A[0 .. $_ -1]) . ") -> " .
+ (min @A[0 .. $_ -1] < $A[$_] ? min @A[0 .. $_ -1] : 0 ) } (1 .. @A -1);
+}
+
+say "(0, ",
+ join (", ",
+ map { my $c = min @A[0 .. $_ -1]; $c < $A[$_] ? $c : 0 } (1 .. @A -1)),
+ ")";
diff --git a/challenge-073/arne-sommer/perl/min-sliding-window-perl b/challenge-073/arne-sommer/perl/min-sliding-window-perl
new file mode 100755
index 0000000000..9e43f35bb2
--- /dev/null
+++ b/challenge-073/arne-sommer/perl/min-sliding-window-perl
@@ -0,0 +1,25 @@
+#! /usr/bin/env perl
+
+use strict;
+use feature 'say';
+use Getopt::Long;
+use List::Util 'min';
+use Perl6::Junction 'all';
+
+my $verbose = 0;
+
+GetOptions("verbose" => \$verbose);
+
+die 'Specify $S and @A' unless @ARGV;
+
+my ($S, @A) = @ARGV;
+
+die '$S must be an integer >= 1' unless int($S) == $S && $S >= 1;
+die '@A must contain integers only' unless all(@A) == qr/^\d+$/;
+
+map { say ": (" . join(", ", @A[$_ .. $_ + $S -1]) . ") min -> " . min @A[$_ .. $_ + $S -1] }
+(0 .. @A - $S) if $verbose;
+
+say "(",
+ join (", ", map { min @A[$_ .. $_ + $S -1] } (0 .. @A - $S)),
+ ")";
diff --git a/challenge-073/arne-sommer/perl/smallest-neighbour-perl b/challenge-073/arne-sommer/perl/smallest-neighbour-perl
new file mode 100755
index 0000000000..8043a49e6b
--- /dev/null
+++ b/challenge-073/arne-sommer/perl/smallest-neighbour-perl
@@ -0,0 +1,29 @@
+#! /usr/bin/env perl
+
+use strict;
+use feature 'say';
+use Getopt::Long;
+use List::Util 'min';
+use Perl6::Junction 'all';
+
+my $verbose = 0;
+
+GetOptions("verbose" => \$verbose);
+
+die 'Specify @A' unless @ARGV;
+
+my (@A) = @ARGV;
+
+die '@A must contain integers only' unless all(@A) == qr/^\d+$/;
+
+if ($verbose)
+{
+ say ": index 0 (" . $A[0] . ") -> () -> 0";
+ map { say ": index $_ ($A[$_]) -> (" . join(", ", @A[0 .. $_ -1]) . ") -> " .
+ (min @A[0 .. $_ -1] < $A[$_] ? min @A[0 .. $_ -1] : 0 ) } (1 .. @A -1);
+}
+
+say "(0, ",
+ join (", ",
+ map { my $c = min @A[0 .. $_ -1]; $c < $A[$_] ? $c : 0 } (1 .. @A -1)),
+ ")";
diff --git a/challenge-073/arne-sommer/raku/ch-1.raku b/challenge-073/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..711f6fa1b2
--- /dev/null
+++ b/challenge-073/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,9 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $S where * >= 1, *@A, :v(:$verbose));
+
+die "Integers only" unless all(@A) ~~ Int;
+
+(0 .. @A.elems - $S).map({ say ": (" ~ @A[$_ .. $_ + $S -1].join(", ") ~ ") min -> " ~ @A[$_ .. $_ + $S -1].min }) if $verbose;
+
+say "(", (0 .. @A.elems - $S).map({ @A[$_ .. $_ + $S -1].min }).join(", "), ")"; \ No newline at end of file
diff --git a/challenge-073/arne-sommer/raku/ch-2.raku b/challenge-073/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..c0b349f180
--- /dev/null
+++ b/challenge-073/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,12 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@A where @A.elems > 0 && all(@A) ~~ Int, :v(:$verbose));
+
+if $verbose
+{
+ say ": index 0 (@A[0]) -> () -> 0";
+ (1 .. @A.end).map({ say ": index $_ (@A[$_]) -> (" ~ @A[0 .. $_ -1].join(", ") ~ ") -> "
+ ~ (@A[0 .. $_ -1].min < @A[$_] ?? @A[0 .. $_ -1].min !! 0 ) })
+}
+
+say "(0, ", (1 .. @A.end).map({ my $c = @A[0 .. $_ -1].min; $c < @A[$_] ?? $c !! 0 }).join(", "), ")";
diff --git a/challenge-073/arne-sommer/raku/min-sliding-window b/challenge-073/arne-sommer/raku/min-sliding-window
new file mode 100755
index 0000000000..711f6fa1b2
--- /dev/null
+++ b/challenge-073/arne-sommer/raku/min-sliding-window
@@ -0,0 +1,9 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $S where * >= 1, *@A, :v(:$verbose));
+
+die "Integers only" unless all(@A) ~~ Int;
+
+(0 .. @A.elems - $S).map({ say ": (" ~ @A[$_ .. $_ + $S -1].join(", ") ~ ") min -> " ~ @A[$_ .. $_ + $S -1].min }) if $verbose;
+
+say "(", (0 .. @A.elems - $S).map({ @A[$_ .. $_ + $S -1].min }).join(", "), ")"; \ No newline at end of file
diff --git a/challenge-073/arne-sommer/raku/min-sliding-window-plain b/challenge-073/arne-sommer/raku/min-sliding-window-plain
new file mode 100755
index 0000000000..7b3cb8d005
--- /dev/null
+++ b/challenge-073/arne-sommer/raku/min-sliding-window-plain
@@ -0,0 +1,5 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $S where * >= 1, *@A);
+
+say "(", (0 .. @A.elems - $S).map({ @A[$_ .. $_ + $S -1].min }).join(", "), ")";
diff --git a/challenge-073/arne-sommer/raku/smallest-neighbour b/challenge-073/arne-sommer/raku/smallest-neighbour
new file mode 100755
index 0000000000..c0b349f180
--- /dev/null
+++ b/challenge-073/arne-sommer/raku/smallest-neighbour
@@ -0,0 +1,12 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@A where @A.elems > 0 && all(@A) ~~ Int, :v(:$verbose));
+
+if $verbose
+{
+ say ": index 0 (@A[0]) -> () -> 0";
+ (1 .. @A.end).map({ say ": index $_ (@A[$_]) -> (" ~ @A[0 .. $_ -1].join(", ") ~ ") -> "
+ ~ (@A[0 .. $_ -1].min < @A[$_] ?? @A[0 .. $_ -1].min !! 0 ) })
+}
+
+say "(0, ", (1 .. @A.end).map({ my $c = @A[0 .. $_ -1].min; $c < @A[$_] ?? $c !! 0 }).join(", "), ")";
diff --git a/challenge-073/arne-sommer/raku/smallest-neighbour-first b/challenge-073/arne-sommer/raku/smallest-neighbour-first
new file mode 100755
index 0000000000..822e9a1ef5
--- /dev/null
+++ b/challenge-073/arne-sommer/raku/smallest-neighbour-first
@@ -0,0 +1,11 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@A where @A.elems > 0 && all(@A) ~~ Int, :v(:$verbose));
+
+if $verbose
+{
+ say "index 0 -> () -> 0";
+ (1 .. @A.end).map({ say ": index $_ -> (" ~ @A[0 .. $_ -1].join(", ") ~ ") -> " ~ @A[0 .. $_ -1].min });
+}
+
+say "(0, ", (1 .. @A.end).map({ @A[0 .. $_ -1].min }).join(", "), ")"; \ No newline at end of file