From 89aaa58e0df44a6a731411d6bf025e9cf1855a4c Mon Sep 17 00:00:00 2001 From: Guillermo Ramos Date: Fri, 14 Jun 2019 10:43:24 +0200 Subject: [012#2] --- 012/ch2.pl | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100755 012/ch2.pl diff --git a/012/ch2.pl b/012/ch2.pl new file mode 100755 index 0000000..6c12861 --- /dev/null +++ b/012/ch2.pl @@ -0,0 +1,35 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +sub commonPath { + # Normalize paths (merge multiple "/"s into a single one) + map s|/+|/|g, @_; + + # This array stores the common path components so far + my @common = split m|/|, shift, -1; + + # Iterate over arguments (paths) and update @common accordingly + foreach my $path (@_) { + my @current = split m|/|, $path, -1; + + # Cut @common if longer than the current one + @common = @common[0 .. $#current] if $#current < $#common; + + # Cut @common to keep only the matching components + foreach my $i (0 .. $#common) { + if ($common[$i] ne $current[$i]) { + @common = @common[0 .. $i-1]; + last; + } + } + } + + # Corner case: @common == ('') means root + return @common == 1 && $common[0] eq '' + ? "/" + : join "/", @common; +} + +print commonPath(@ARGV), "\n"; -- cgit v1.2.3