diff options
| -rw-r--r-- | challenge-018/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-018/jaldhar-h-vyas/perl5/ch-1.pl | 29 | ||||
| -rwxr-xr-x | challenge-018/jaldhar-h-vyas/perl6/ch-1.p6 | 19 |
3 files changed, 49 insertions, 0 deletions
diff --git a/challenge-018/jaldhar-h-vyas/blog.txt b/challenge-018/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..cfa3df0edd --- /dev/null +++ b/challenge-018/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2019/08/perl_weekly_challenge_week_18.html
\ No newline at end of file diff --git a/challenge-018/jaldhar-h-vyas/perl5/ch-1.pl b/challenge-018/jaldhar-h-vyas/perl5/ch-1.pl new file mode 100755 index 0000000000..65b9b72876 --- /dev/null +++ b/challenge-018/jaldhar-h-vyas/perl5/ch-1.pl @@ -0,0 +1,29 @@ +#!/usr/bin/perl +use warnings; +use strict; +use 5.010; + +sub LongestCommonSubstring { + my @strings = sort { length $a <=> length $b } @_; + + my $shortest = shift @strings; + my @suffixes; + for my $i (0 .. length($shortest) - 1) { + for my $j ($i .. length($shortest) - 1) { + push @suffixes, substr $shortest, $i, $j - $i + 1; + } + } + @suffixes = reverse sort { length $a <=> length $b } @suffixes; + + SUFFIX: for my $suffix (@suffixes) { + for my $string (@strings) { + if ( $string !~ /$suffix/) { + next SUFFIX; + } + } + return $suffix; + } +} + +say LongestCommonSubstring('ABABC', 'BABCA', 'ABCBA'); + diff --git a/challenge-018/jaldhar-h-vyas/perl6/ch-1.p6 b/challenge-018/jaldhar-h-vyas/perl6/ch-1.p6 new file mode 100755 index 0000000000..a8780681f5 --- /dev/null +++ b/challenge-018/jaldhar-h-vyas/perl6/ch-1.p6 @@ -0,0 +1,19 @@ +#!/usr/bin/perl6 + +sub LongestCommonSubstring(*@strings) { + @strings = @strings.sort(*.chars); + + my $shortest = @strings.shift; + my @substrings; + for 0 ..^ $shortest.chars -> $i { + for $i ..^ $shortest.chars -> $j { + @substrings.push($shortest.substr($i, $j - $i + 1)); + } + } + + return @substrings.sort(-*.chars) + .grep({ @strings.all.contains($_) }) + .first; +} + +say LongestCommonSubstring('ABABC', 'BABCA', 'ABCBA'); |
