diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-08-15 00:01:52 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-08-15 00:01:52 +0100 |
| commit | 34f2cfddb2425c2c444ee69a121139127c219ece (patch) | |
| tree | ff6928d1532e655d5ae732b17b0ba67fd99342fe /challenge-073 | |
| parent | 5630d4ba0b2fdd9762cbceb0f276811a5e4f469f (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-073/arne-sommer/perl/ch-1.pl | 25 | ||||
| -rwxr-xr-x | challenge-073/arne-sommer/perl/ch-2.pl | 29 | ||||
| -rwxr-xr-x | challenge-073/arne-sommer/perl/min-sliding-window-perl | 25 | ||||
| -rwxr-xr-x | challenge-073/arne-sommer/perl/smallest-neighbour-perl | 29 | ||||
| -rwxr-xr-x | challenge-073/arne-sommer/raku/ch-1.raku | 9 | ||||
| -rwxr-xr-x | challenge-073/arne-sommer/raku/ch-2.raku | 12 | ||||
| -rwxr-xr-x | challenge-073/arne-sommer/raku/min-sliding-window | 9 | ||||
| -rwxr-xr-x | challenge-073/arne-sommer/raku/min-sliding-window-plain | 5 | ||||
| -rwxr-xr-x | challenge-073/arne-sommer/raku/smallest-neighbour | 12 | ||||
| -rwxr-xr-x | challenge-073/arne-sommer/raku/smallest-neighbour-first | 11 |
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 |
