diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-09-15 11:42:36 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-15 11:42:36 +0100 |
| commit | 875a712a0ad6bdfe30eabab960d72eeb5e5c74ff (patch) | |
| tree | 6df89b3df478b750d86d8e78eaaf169dd27037a5 /challenge-182 | |
| parent | f7c119f8b4032cd97fec71556043b94a3fe0686d (diff) | |
| parent | 335b8e6dae24896260455ada7aefcc1cdf901feb (diff) | |
| download | perlweeklychallenge-club-875a712a0ad6bdfe30eabab960d72eeb5e5c74ff.tar.gz perlweeklychallenge-club-875a712a0ad6bdfe30eabab960d72eeb5e5c74ff.tar.bz2 perlweeklychallenge-club-875a712a0ad6bdfe30eabab960d72eeb5e5c74ff.zip | |
Merge pull request #6747 from polettix/polettix/pwc182
Add polettix's solution to challenge-182
Diffstat (limited to 'challenge-182')
| -rw-r--r-- | challenge-182/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-182/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-182/polettix/perl/ch-1.pl | 17 | ||||
| -rw-r--r-- | challenge-182/polettix/perl/ch-2.pl | 29 | ||||
| -rw-r--r-- | challenge-182/polettix/raku/ch-1.raku | 15 | ||||
| -rw-r--r-- | challenge-182/polettix/raku/ch-2.raku | 22 |
6 files changed, 85 insertions, 0 deletions
diff --git a/challenge-182/polettix/blog.txt b/challenge-182/polettix/blog.txt new file mode 100644 index 0000000000..68bb0469a2 --- /dev/null +++ b/challenge-182/polettix/blog.txt @@ -0,0 +1 @@ +https://etoobusy.polettix.it/2022/09/15/pwc182-max-index/ diff --git a/challenge-182/polettix/blog1.txt b/challenge-182/polettix/blog1.txt new file mode 100644 index 0000000000..fbad7ba32d --- /dev/null +++ b/challenge-182/polettix/blog1.txt @@ -0,0 +1 @@ +https://etoobusy.polettix.it/2022/09/16/pwc182-common-path/ diff --git a/challenge-182/polettix/perl/ch-1.pl b/challenge-182/polettix/perl/ch-1.pl new file mode 100644 index 0000000000..76006af638 --- /dev/null +++ b/challenge-182/polettix/perl/ch-1.pl @@ -0,0 +1,17 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; + +my @args = @ARGV ? @ARGV : (5, 2, 9, 1, 7, 6, 9); +say max_index(@args); + +sub max_index (@args) { + return ( + sort { + $args[$a] <=> $args[$b] # sort ascending, BUT... + || $b <=> $a # be anti-stable if equal + } (0 .. $#args) + )[-1]; +} diff --git a/challenge-182/polettix/perl/ch-2.pl b/challenge-182/polettix/perl/ch-2.pl new file mode 100644 index 0000000000..600704bcf3 --- /dev/null +++ b/challenge-182/polettix/perl/ch-2.pl @@ -0,0 +1,29 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; +use List::Util 'reduce'; + +say common_path( + qw< + /a/b/c/1/x.pl + /a/b/c/d/e/2/x.pl + /a/b/c/d/3/x.pl + /a/b/c/4/x.pl + /a/b/c/d/5/x.pl + > +); + +sub common_path (@paths) { + my $retval = reduce {{ + my @common; + for my $i (0 .. $a->$#*) { + last if $i > $b->$#*; + last if $a->[$i] ne $b->[$i]; + push @common, $a->[$i]; + } + \@common; + }} map { my @parts = split m{/}mxs; pop @parts; \@parts } @paths; + return join '/', $retval->@*; +} diff --git a/challenge-182/polettix/raku/ch-1.raku b/challenge-182/polettix/raku/ch-1.raku new file mode 100644 index 0000000000..cdfb03db56 --- /dev/null +++ b/challenge-182/polettix/raku/ch-1.raku @@ -0,0 +1,15 @@ +#!/usr/bin/env raku +use v6; +sub MAIN (*@args) { + @args = 5, 2, 9, 1, 7, 6 unless @args; + put max-index(@args); +} + +sub max-index (@args) { + (0 ..^ @args).sort( + { + @args[$^a] <=> @args[$^b] # sort by value, but if equal... + || $^b <=> $a # just be anti-stable + } + )[*-1] # then just take the last element +} diff --git a/challenge-182/polettix/raku/ch-2.raku b/challenge-182/polettix/raku/ch-2.raku new file mode 100644 index 0000000000..8536dd2c10 --- /dev/null +++ b/challenge-182/polettix/raku/ch-2.raku @@ -0,0 +1,22 @@ +#!/usr/bin/env raku +use v6; +sub MAIN { + put common-path(< + /a/b/c/1/x.pl + /a/b/c/d/e/2/x.pl + /a/b/c/d/3/x.pl + /a/b/c/4/x.pl + /a/b/c/d/5/x.pl + >); +} + +sub common-path (@paths) { + @paths».split(/\//)».Array.map({.pop;$_}).reduce({ + my @common; + for @$^a Z @$^b -> ($a, $b) { + last if $a ne $b; + @common.push: $a; + } + @common; + }).join('/'); +} |
