diff options
| author | Ruben Westerberg <drclaw@mac.com> | 2019-04-26 16:21:25 +1000 |
|---|---|---|
| committer | Ruben Westerberg <drclaw@mac.com> | 2019-04-26 16:21:25 +1000 |
| commit | b570c3a7deefc44d50bbfa4876d8342ed28c0577 (patch) | |
| tree | c44f409224936fbca3595c75e47122d9a9b021d2 | |
| parent | 8c3363aa35f6e01665d47d7b1c4e425b57deb839 (diff) | |
| download | perlweeklychallenge-club-b570c3a7deefc44d50bbfa4876d8342ed28c0577.tar.gz perlweeklychallenge-club-b570c3a7deefc44d50bbfa4876d8342ed28c0577.tar.bz2 perlweeklychallenge-club-b570c3a7deefc44d50bbfa4876d8342ed28c0577.zip | |
Inital solutions for W5 C1 and C2
| -rw-r--r-- | challenge-005/ruben-westerberg/perl6/anagram.pm6 | 38 | ||||
| -rwxr-xr-x | challenge-005/ruben-westerberg/perl6/ch-1.p6 | 61 | ||||
| -rwxr-xr-x | challenge-005/ruben-westerberg/perl6/ch-2.p6 | 5 |
3 files changed, 51 insertions, 53 deletions
diff --git a/challenge-005/ruben-westerberg/perl6/anagram.pm6 b/challenge-005/ruben-westerberg/perl6/anagram.pm6 new file mode 100644 index 0000000000..0f4710d52f --- /dev/null +++ b/challenge-005/ruben-westerberg/perl6/anagram.pm6 @@ -0,0 +1,38 @@ +unit module anagram; + +sub findAnangrams(@letters, @words) is export { + my @a=sort @letters; + my @anagrams; + my $test; + while * { + my $k=0; + my $l=0; + my $tmp; + my $flag=False; + my $maxK=-1; + my $maxL=-1; + + while ($k < @a.elems-1) { + $maxK= $k if ((@a[$k] lt @a[$k+1]) && ($k > $maxK)); + $k++; + } + last unless $maxK >= 0; + $maxL=$maxK+1; + while ($l < @a.elems) { + $maxL= $l if ((@a[$maxK] lt @a[$l]) && $l>$maxL); + $l++; + } + $tmp=@a[$maxK]; + @a[$maxK]=@a[$maxL]; + @a[$maxL]=$tmp; + my @b=@a.splice($maxK+1).reverse; + @a.=append(@b); + $test=@a.join(""); + #say $test; + @anagrams.append(@words.hyper(degree=>4,batch=>50000).grep: {$_ eq $test}); + + } + $test=@a.join(""); + @anagrams.append(@words.hyper(degree=>4,batch=>50000).grep: {$_ eq $test}); + @anagrams; +} diff --git a/challenge-005/ruben-westerberg/perl6/ch-1.p6 b/challenge-005/ruben-westerberg/perl6/ch-1.p6 index 9f90998032..308d37672c 100755 --- a/challenge-005/ruben-westerberg/perl6/ch-1.p6 +++ b/challenge-005/ruben-westerberg/perl6/ch-1.p6 @@ -1,57 +1,12 @@ #!/usr/bin/env perl6 # -my $words-list-file="words_alpha"; -my $word-list-url="https://github.com/dwyl/english-words/blob/master/words_alpha.zip?raw=true"; - -my $res=qqx{curl -L $word-list-url > $words-list-file.zip && unzip $words-list-file.zip } unless ($words-list-file~".txt").IO.e; - -my @word-list=($words-list-file~".txt").IO.lines>>.trim; - -my $input; -while $input=prompt "Give me a word: " { - #say grep {$_ eq $input} ,@word-list; - my @letters=$input.split("")[1..*-2]; - findAnangram(@letters); +use lib './'; +use anagram; +my $wordsFile= @*ARGS[0] // "words_alpha.txt"; + +my @word-list=$wordsFile.IO.lines; +while my $input=prompt "Give me a word: " { + my @letters=$input.trim.lc.split("")[1..*-2]; + say "Anagrams: ",findAnangrams(@letters,@word-list); } -sub findAnangram(@letters) { - say "Base word is: @letters[]"; - my @a=sort @letters; - my @anagrams;#=gather { - while * { - my $k=0; - my $l=0; - my $tmp; - my $flag=False; - my $maxK=-1; - my $maxL=-1; - while ($k < @a.elems-1) { - $maxK=$k if ((@a[$k] lt @a[$k+1]) && ($k > $maxK)); - $k++; - } - last unless $maxK >= 0; - #say "k is $maxK"; - $maxL=$maxK+1; - while ($l < @a.elems) { - $maxL= $l if ((@a[$maxK] lt @a[$l]) && $l>$maxL); - $l++; - } - #say "l is $maxL"; - $tmp=@a[$maxK]; - @a[$maxK]=@a[$maxL]; - @a[$maxL]=$tmp; - #say @a; - my @b=@a.splice($maxK+1).reverse; - #say @b; - @a.=append(@b); - #rest the terminal line here - #say @a; - my $test=@a.join(""); - @word-list.hyper.map: {@anagrams.push: $_ if $_ eq $test}; - - } - say @anagrams; -} - - - diff --git a/challenge-005/ruben-westerberg/perl6/ch-2.p6 b/challenge-005/ruben-westerberg/perl6/ch-2.p6 new file mode 100755 index 0000000000..2ce015866c --- /dev/null +++ b/challenge-005/ruben-westerberg/perl6/ch-2.p6 @@ -0,0 +1,5 @@ +#!/usr/bin/env perl6 +my $wordsFile=$*ARGS[0] // "words_alpha.txt"; +say $wordsFile.IO.lines.hyper(degree=>4, batch=>50000).map({ + .split("")[1..*-2].sort.join; +}).Bag.antipairs.max; |
