diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-09-27 02:33:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-27 02:33:46 +0100 |
| commit | 6970fae3e74395626428f4f89e426a2b312addb1 (patch) | |
| tree | ab3a58e3bef594bfa87f0e1026a53a98648df0dc | |
| parent | b8f3392f3f84c945d07c33a189c99211b9ea62a0 (diff) | |
| parent | 936f0ec5be05fa12085006670ec8ab243e520b45 (diff) | |
| download | perlweeklychallenge-club-6970fae3e74395626428f4f89e426a2b312addb1.tar.gz perlweeklychallenge-club-6970fae3e74395626428f4f89e426a2b312addb1.tar.bz2 perlweeklychallenge-club-6970fae3e74395626428f4f89e426a2b312addb1.zip | |
Merge pull request #2381 from juliodcs/juliodcs-week79
Juliodcs week79
| -rw-r--r-- | challenge-079/juliodcs/perl/ch-1.pl | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/challenge-079/juliodcs/perl/ch-1.pl b/challenge-079/juliodcs/perl/ch-1.pl index 5409ee8c5a..cf72b9f9b9 100644 --- a/challenge-079/juliodcs/perl/ch-1.pl +++ b/challenge-079/juliodcs/perl/ch-1.pl @@ -14,16 +14,13 @@ use strict; use warnings; use feature 'say'; use experimental 'signatures'; +use bigint; use constant MODULE => 1000000007; -use constant INTEGER_LAST => 2**63 - 1; - -use constant W_ACCURATE => 'Warning: intermediate result > Integer\'last. Result *may* not be accurate!'; -use constant E_ACCURATE => 'Error: Number cannot be > Integer\'last'; use constant E_NO_NUMBER => 'You need to submit a number'; sub length_bin($number) { - length sprintf '%b', $number; + Math::BigInt->new($number)->blog(2) + 1 } # Given a number, it calculates the flips of the most-significant-bit number @@ -39,10 +36,7 @@ sub next_number($number) { } sub calculate ( $number, $total = 0 ) { - if ( $number == 0 ) { - say {*STDERR} W_ACCURATE if $total > INTEGER_LAST; - return $total % MODULE; - } + return $total % MODULE if $number == 0; # All bits besides the first need extra flips # extra flips are equal to the number itself @@ -57,6 +51,4 @@ my $number = shift // q(); die E_NO_NUMBER if $number !~ m{^\d+$}sxm; -die E_ACCURATE if $number > INTEGER_LAST; - say 'Result: ' . calculate($number); |
