aboutsummaryrefslogtreecommitdiff
path: root/challenge-004
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2019-04-22 06:58:30 +1000
committerRuben Westerberg <drclaw@mac.com>2019-04-22 06:58:30 +1000
commite7f6ba0e658583dbc1fe7756f276b52ffe2d3f7e (patch)
treeac2039b8eca9508525ef862ab2a53a7fe00ed35c /challenge-004
parente80612d6f29f76ce4ce13eef35eb6a74389b4c86 (diff)
downloadperlweeklychallenge-club-e7f6ba0e658583dbc1fe7756f276b52ffe2d3f7e.tar.gz
perlweeklychallenge-club-e7f6ba0e658583dbc1fe7756f276b52ffe2d3f7e.tar.bz2
perlweeklychallenge-club-e7f6ba0e658583dbc1fe7756f276b52ffe2d3f7e.zip
Ruben-Westerberg/drclaw solutions for W4
Perl5 and Perl6 solution for C1 and C2
Diffstat (limited to 'challenge-004')
-rw-r--r--challenge-004/ruben-westerberg/README8
-rw-r--r--challenge-004/ruben-westerberg/letters.txt1
-rw-r--r--challenge-004/ruben-westerberg/perl5/.ch-1.pl.swpbin0 -> 12288 bytes
-rwxr-xr-xchallenge-004/ruben-westerberg/perl5/ch-1.pl22
-rwxr-xr-xchallenge-004/ruben-westerberg/perl5/ch-2.pl30
-rwxr-xr-xchallenge-004/ruben-westerberg/perl6/ch-1.p620
-rwxr-xr-xchallenge-004/ruben-westerberg/perl6/ch-2.p612
-rw-r--r--challenge-004/ruben-westerberg/words.txt5
8 files changed, 95 insertions, 3 deletions
diff --git a/challenge-004/ruben-westerberg/README b/challenge-004/ruben-westerberg/README
index c2873957a1..f8c44ff70c 100644
--- a/challenge-004/ruben-westerberg/README
+++ b/challenge-004/ruben-westerberg/README
@@ -1,7 +1,9 @@
Solution by Ruben Westerberg
+#Challenge 1: Calculate pi to precision of byte size of program.
+Simply run the .pl and .p6 scripts
-Challange 1 (5-Smooth p5 and p6) does not require command input and runs indefinately
-
-Challenge 2 (pascal triangle p5 and p6) dies if user supplies less then 3 as input on the command line
+#Challenge 2: Word find from a given file of letters
+Usage is perl5/ch-2.pl letters.txt words.txt
+Usage is perl6/ch-2.p6 letters.txt words.txt
diff --git a/challenge-004/ruben-westerberg/letters.txt b/challenge-004/ruben-westerberg/letters.txt
new file mode 100644
index 0000000000..3e2f0e2774
--- /dev/null
+++ b/challenge-004/ruben-westerberg/letters.txt
@@ -0,0 +1 @@
+helloothd were
diff --git a/challenge-004/ruben-westerberg/perl5/.ch-1.pl.swp b/challenge-004/ruben-westerberg/perl5/.ch-1.pl.swp
new file mode 100644
index 0000000000..da013b6872
--- /dev/null
+++ b/challenge-004/ruben-westerberg/perl5/.ch-1.pl.swp
Binary files differ
diff --git a/challenge-004/ruben-westerberg/perl5/ch-1.pl b/challenge-004/ruben-westerberg/perl5/ch-1.pl
new file mode 100755
index 0000000000..a0469ae11e
--- /dev/null
+++ b/challenge-004/ruben-westerberg/perl5/ch-1.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+use Math::BigRat;
+my $places= (stat $0)[7];
+printf "Places: $places\n";
+my $prev="";
+my $sign;
+my $pi=Math::BigRat->new("0/1");
+my $denom=1;
+print "Pi start\n";
+my $stable= 0;
+my $i=0;
+my $float;
+until ($stable) {
+ $sign= (($i % 2) ? -4 : 4);
+ $pi->badd("$sign/$denom");
+ $denom+=2;
+ $i++;
+ $float=$pi->as_float($places);
+ printf "Iteration: $i, Value of PI (to $places decimal places):$float\n";
+ $stable="$float" eq "$prev";
+ $prev=$float;
+}
diff --git a/challenge-004/ruben-westerberg/perl5/ch-2.pl b/challenge-004/ruben-westerberg/perl5/ch-2.pl
new file mode 100755
index 0000000000..5918e78cbc
--- /dev/null
+++ b/challenge-004/ruben-westerberg/perl5/ch-2.pl
@@ -0,0 +1,30 @@
+#!/usr/bin/env perl
+my @letters;
+my %letters;
+my @words;
+open(my $lettersFile ,"<",(shift));
+while (<$lettersFile>) {
+ chomp;
+ s/\W//g;
+ $letters{$_}++ foreach ( split "");
+}
+close $lettersFile;
+
+open(my $wordsFile, "<", (shift));
+my %words;
+while (<$wordsFile>) {
+ chomp;
+ s/\W//gr;
+ my %bag;
+ $bag{$_}++ foreach (split "");
+
+ #now actually compare line by line
+ my $all=1;
+ foreach (keys %bag) {
+ $all &&= $letters{$_} >= $bag{$_};
+ last if not $all;
+ }
+ print "$_\n" if $all;
+
+}
+close $wordsFile;
diff --git a/challenge-004/ruben-westerberg/perl6/ch-1.p6 b/challenge-004/ruben-westerberg/perl6/ch-1.p6
new file mode 100755
index 0000000000..6145705e06
--- /dev/null
+++ b/challenge-004/ruben-westerberg/perl6/ch-1.p6
@@ -0,0 +1,20 @@
+#!/usr/bin/env perl6
+my $places= $*PROGRAM-NAME.IO.s + 1;
+printf "Places: $places\n";
+my $prev="";
+my $sign;
+my $pi=(0/1).FatRat;
+my $denom=1;
+my $stable= 0;
+my $i=0;
+my $float;
+until ($stable) {
+ $sign= (($i %% 2) ?? 4 !! -4);
+ $pi+=($sign/$denom).FatRat;
+ $denom+=2;
+ $i++;
+ $float=$pi.Str.substr(0,$places+1);
+ say "Iteration: $i, Value of PI (to $places decimal places):$float";
+ $stable=$float eq $prev;
+ $prev=$float;
+}
diff --git a/challenge-004/ruben-westerberg/perl6/ch-2.p6 b/challenge-004/ruben-westerberg/perl6/ch-2.p6
new file mode 100755
index 0000000000..b97754a9fd
--- /dev/null
+++ b/challenge-004/ruben-westerberg/perl6/ch-2.p6
@@ -0,0 +1,12 @@
+#!/usr/bin/env perl6
+#Read a list of words to process
+#Read file of letters
+my $lettersFile=@*ARGS[0];
+my $wordsFile=@*ARGS[1];
+my %letters=$lettersFile.IO.slurp.trim.split("")[1..*-2].Bag.hash;
+my %words=$wordsFile.IO.lines.map({$_.trim => .trim.split("")[1..*-2].Bag.hash});
+say (%words.map: {
+ my @keys= .value.keys;
+ my @result= ($_.value{@keys}) Z<= (%letters{@keys});
+ .key if so all @result;
+});
diff --git a/challenge-004/ruben-westerberg/words.txt b/challenge-004/ruben-westerberg/words.txt
new file mode 100644
index 0000000000..8bea0181bb
--- /dev/null
+++ b/challenge-004/ruben-westerberg/words.txt
@@ -0,0 +1,5 @@
+hello
+helllo
+there
+how
+word