aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoelle Maslak <jmaslak@antelope.net>2019-08-16 23:22:56 -0600
committerJoelle Maslak <jmaslak@antelope.net>2019-08-16 23:22:56 -0600
commita439475c2d02388ada7dcf1ce5062ff024f0235d (patch)
tree8543bb93da86de7d7ce9e5c4a02aef4ea6e953e6
parent08490371aff671680d216ff0a5b792cf997c9d47 (diff)
downloadperlweeklychallenge-club-a439475c2d02388ada7dcf1ce5062ff024f0235d.tar.gz
perlweeklychallenge-club-a439475c2d02388ada7dcf1ce5062ff024f0235d.tar.bz2
perlweeklychallenge-club-a439475c2d02388ada7dcf1ce5062ff024f0235d.zip
Joelle's Solutions to 21.1
-rwxr-xr-xchallenge-021/joelle-maslak/perl5/ch-1.pl43
-rwxr-xr-xchallenge-021/joelle-maslak/perl6/ch-1.p639
2 files changed, 82 insertions, 0 deletions
diff --git a/challenge-021/joelle-maslak/perl5/ch-1.pl b/challenge-021/joelle-maslak/perl5/ch-1.pl
new file mode 100755
index 0000000000..e8c7e19b3b
--- /dev/null
+++ b/challenge-021/joelle-maslak/perl5/ch-1.pl
@@ -0,0 +1,43 @@
+#!/usr/bin/env perl
+use v5.22;
+use strict;
+use warnings;
+
+
+use Math::BigRat;
+
+sub main() {
+ die "Usage: $0 <digits>" if @ARGV > 1;
+ my $digits = ( shift @ARGV ) // 10;
+ die "Usage: $0 <digits>" if $digits !~ m/^[0-9]+$/ms;
+
+ return unless $digits;
+ if ( $digits == 1 ) {
+ say "2";
+ return;
+ }
+
+ my $e = Math::BigRat->new(2);
+ my $current = Math::BigRat->new(1);
+ my $denom = Math::BigRat->new(1);
+
+ my $chkdigits = $digits;
+
+ do {
+ $current++;
+ $denom *= $current;
+
+ $e += Math::BigRat->new("1/$denom");
+ if (length($denom) >= $chkdigits + 3) { # 2 should be enough, but we'll be safe
+ my $digit = ((int $e * (Math::BigRat->new(10)**$chkdigits)) % 10);
+ if ($digit =~ m/[49]$/) {
+ $chkdigits++;
+ }
+ }
+ } while ( length($denom) < $chkdigits + 3 );
+
+ say $e->as_float($digits);
+ return;
+}
+
+main();
diff --git a/challenge-021/joelle-maslak/perl6/ch-1.p6 b/challenge-021/joelle-maslak/perl6/ch-1.p6
new file mode 100755
index 0000000000..f4b281f286
--- /dev/null
+++ b/challenge-021/joelle-maslak/perl6/ch-1.p6
@@ -0,0 +1,39 @@
+#!/usr/bin/env perl6
+use v6;
+
+#
+# Copyright © 2019 Joelle Maslak
+# All Rights Reserved - See License
+#
+
+multi sub MAIN(UInt:D $digits where * == 0) { return; }
+multi sub MAIN(UInt:D $digits where * == 1) { say "2"; return; }
+multi sub MAIN(UInt:D $digits = 10) {
+ return unless $digits;
+
+ my FatRat $limit = FatRat.new(1, 10**$digits);
+
+ my FatRat $e = FatRat.new(2);
+ my $current = 1;
+ my $denom = 1;
+
+ my $chkdigits = $digits;
+ repeat {
+ $current++;
+ $denom *= $current;
+
+ $e += FatRat.new(1, $denom);
+
+ if $denom.chars >= ($chkdigits + 3) { # 2 should be enough, but we'll be safe
+ if $e.substr(0, $chkdigits+2) ~~ / <[4 9]> $/ {
+ $chkdigits++;
+ }
+ }
+ } while $denom.chars < $chkdigits+3;
+
+ $e += FatRat.new(5, (10**$digits+1) );
+ say $e.substr(0, $digits+1);
+ return;
+}
+
+