aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Proctor <simon.proctor@zpg.co.uk>2019-07-22 10:43:34 +0100
committerSimon Proctor <simon.proctor@zpg.co.uk>2019-07-22 10:43:34 +0100
commitad5afaa24f905945daec75e9ebcb311d883436f7 (patch)
treeee9e4163312873ada3b6aa77e5ba5c4dbfcf12ea
parentdeacba787f3ddafc108c92ac97f9cd53c589ff73 (diff)
downloadperlweeklychallenge-club-ad5afaa24f905945daec75e9ebcb311d883436f7.tar.gz
perlweeklychallenge-club-ad5afaa24f905945daec75e9ebcb311d883436f7.tar.bz2
perlweeklychallenge-club-ad5afaa24f905945daec75e9ebcb311d883436f7.zip
Longest substrings challenge
-rw-r--r--challenge-018/simon-proctor/perl6/ch-1.p623
1 files changed, 23 insertions, 0 deletions
diff --git a/challenge-018/simon-proctor/perl6/ch-1.p6 b/challenge-018/simon-proctor/perl6/ch-1.p6
new file mode 100644
index 0000000000..ee828ecfd1
--- /dev/null
+++ b/challenge-018/simon-proctor/perl6/ch-1.p6
@@ -0,0 +1,23 @@
+#!/usr/bin/env perl6
+
+use v6;
+
+#| Find the longest common sub strings of a list of strings
+sub MAIN (
+ *@words where *.elems > 1 #= List of words to compare
+) {
+ my @word-subs = @words.map( &all-substrings );
+ .say for ([(&)] @word-subs).keys.sort( { $^b.codes <=> $^a.codes } ).grep( { state $len = $_.codes; $_.codes == $len });
+}
+
+sub all-substrings( Str $word ) {
+ my $len = $word.codes;
+ my @subs;
+
+ for (1..$len) -> $sub-len {
+ for (0..$len-$sub-len) -> $start {
+ @subs.push( $word.substr($start,$sub-len) );
+ }
+ }
+ return set( @subs );
+}