aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2019-04-26 16:21:25 +1000
committerRuben Westerberg <drclaw@mac.com>2019-04-26 16:21:25 +1000
commitb570c3a7deefc44d50bbfa4876d8342ed28c0577 (patch)
treec44f409224936fbca3595c75e47122d9a9b021d2
parent8c3363aa35f6e01665d47d7b1c4e425b57deb839 (diff)
downloadperlweeklychallenge-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.pm638
-rwxr-xr-xchallenge-005/ruben-westerberg/perl6/ch-1.p661
-rwxr-xr-xchallenge-005/ruben-westerberg/perl6/ch-2.p65
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;