aboutsummaryrefslogtreecommitdiff
path: root/challenge-004
diff options
context:
space:
mode:
authordmaestro <dmaestro@cpan.org>2019-04-18 07:56:19 -0500
committerdmaestro <dmaestro@cpan.org>2019-04-18 07:57:57 -0500
commitc6f7abe46de7a71de82890b455e6ce06c91170dc (patch)
tree20ad3426316f4616556ba8bf717f76fa71c4cd7a /challenge-004
parent4a48560dc096968a5dec73a357bc614505ca81e2 (diff)
downloadperlweeklychallenge-club-c6f7abe46de7a71de82890b455e6ce06c91170dc.tar.gz
perlweeklychallenge-club-c6f7abe46de7a71de82890b455e6ce06c91170dc.tar.bz2
perlweeklychallenge-club-c6f7abe46de7a71de82890b455e6ce06c91170dc.zip
Solutions to Challenge 4 for Doug Schrag
Diffstat (limited to 'challenge-004')
-rw-r--r--challenge-004/doug-schrag/perl6/ch-1.p627
-rw-r--r--challenge-004/doug-schrag/perl6/ch-2.p613
2 files changed, 40 insertions, 0 deletions
diff --git a/challenge-004/doug-schrag/perl6/ch-1.p6 b/challenge-004/doug-schrag/perl6/ch-1.p6
new file mode 100644
index 0000000000..dc93ecece7
--- /dev/null
+++ b/challenge-004/doug-schrag/perl6/ch-1.p6
@@ -0,0 +1,27 @@
+use v6;
+
+my $chars = $*PROGRAM.slurp.chars;
+say pi-rat.Str.substr(0,$chars);
+say "$chars digits!";
+
+sub postfix:<!> ($n) { [*] 1..$n }
+sub f($k) {
+ FatRat.new: (4*$k)! * (1103 + 26390 * $k), ($k!)**4 * 396**(4*$k)
+}
+sub pi-rat () {
+ 9801 * sqrt-rat(2, 1e-500) / 4
+ / [+] (^80).map: *.&f
+}
+
+multi sub sqrt-rat ($n where * > 0, $eps) {
+ my $base = $n.FatRat($eps);
+ my $r = sqrt($base).FatRat($eps);
+ my $est;
+ repeat {
+ $est = $r;
+ $r = ($base / $est + $est) / 2;
+ } while abs($r - $est) > $eps;
+
+ return $r;
+}
+multi sub sqrt-rat (0) { 0 }
diff --git a/challenge-004/doug-schrag/perl6/ch-2.p6 b/challenge-004/doug-schrag/perl6/ch-2.p6
new file mode 100644
index 0000000000..754f7849f6
--- /dev/null
+++ b/challenge-004/doug-schrag/perl6/ch-2.p6
@@ -0,0 +1,13 @@
+use v6;
+
+sub MAIN(:$file?, *@letters where *.all.chars == 1) {
+ say @letters;
+ my $file-handle = .IO with $file;
+ $file-handle ||= $*IN;
+ my $tiles = Bag.new(@letters>>.fc);
+ for $file-handle.lines>>.fc -> $word {
+ $word.comb.Bag (<=) $tiles
+ and say $word;
+ }
+
+}