diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-08-17 06:26:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-08-17 06:26:52 +0100 |
| commit | f997fb18f9f7949b181fa5a445235ce32303e0d0 (patch) | |
| tree | 79a6e24409e88247f3533bbcbb2f6e0becc7b749 | |
| parent | 46ee69aabfaa3c9549b9254d3d253c28a0d96c91 (diff) | |
| parent | a439475c2d02388ada7dcf1ce5062ff024f0235d (diff) | |
| download | perlweeklychallenge-club-f997fb18f9f7949b181fa5a445235ce32303e0d0.tar.gz perlweeklychallenge-club-f997fb18f9f7949b181fa5a445235ce32303e0d0.tar.bz2 perlweeklychallenge-club-f997fb18f9f7949b181fa5a445235ce32303e0d0.zip | |
Merge pull request #516 from jmaslak/joelle-21-1-1
Joelle's Solutions to 21.1
| -rwxr-xr-x | challenge-021/joelle-maslak/perl5/ch-1.pl | 43 | ||||
| -rwxr-xr-x | challenge-021/joelle-maslak/perl6/ch-1.p6 | 39 |
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; +} + + |
