diff options
| author | Simon Proctor <simon.proctor@zpg.co.uk> | 2019-07-22 10:43:34 +0100 |
|---|---|---|
| committer | Simon Proctor <simon.proctor@zpg.co.uk> | 2019-07-22 10:43:34 +0100 |
| commit | ad5afaa24f905945daec75e9ebcb311d883436f7 (patch) | |
| tree | ee9e4163312873ada3b6aa77e5ba5c4dbfcf12ea | |
| parent | deacba787f3ddafc108c92ac97f9cd53c589ff73 (diff) | |
| download | perlweeklychallenge-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.p6 | 23 |
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 ); +} |
