aboutsummaryrefslogtreecommitdiff
path: root/challenge-182
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-09-15 11:42:36 +0100
committerGitHub <noreply@github.com>2022-09-15 11:42:36 +0100
commit875a712a0ad6bdfe30eabab960d72eeb5e5c74ff (patch)
tree6df89b3df478b750d86d8e78eaaf169dd27037a5 /challenge-182
parentf7c119f8b4032cd97fec71556043b94a3fe0686d (diff)
parent335b8e6dae24896260455ada7aefcc1cdf901feb (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-182/polettix/blog1.txt1
-rw-r--r--challenge-182/polettix/perl/ch-1.pl17
-rw-r--r--challenge-182/polettix/perl/ch-2.pl29
-rw-r--r--challenge-182/polettix/raku/ch-1.raku15
-rw-r--r--challenge-182/polettix/raku/ch-2.raku22
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('/');
+}