aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-09-27 02:33:46 +0100
committerGitHub <noreply@github.com>2020-09-27 02:33:46 +0100
commit6970fae3e74395626428f4f89e426a2b312addb1 (patch)
treeab3a58e3bef594bfa87f0e1026a53a98648df0dc
parentb8f3392f3f84c945d07c33a189c99211b9ea62a0 (diff)
parent936f0ec5be05fa12085006670ec8ab243e520b45 (diff)
downloadperlweeklychallenge-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.pl14
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);