From 623dc722f1be38a909baf7973e8cbbc8b317cd4c Mon Sep 17 00:00:00 2001 From: "Jaldhar H. Vyas" Date: Sat, 3 Aug 2019 18:41:15 -0400 Subject: Challenge 18 by Jaldhar H. Vyas: problem 1 and blog. --- challenge-018/jaldhar-h-vyas/blog.txt | 1 + challenge-018/jaldhar-h-vyas/perl5/ch-1.pl | 29 +++++++++++++++++++++++++++++ challenge-018/jaldhar-h-vyas/perl6/ch-1.p6 | 19 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 challenge-018/jaldhar-h-vyas/blog.txt create mode 100755 challenge-018/jaldhar-h-vyas/perl5/ch-1.pl create mode 100755 challenge-018/jaldhar-h-vyas/perl6/ch-1.p6 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'); -- cgit