aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-079/juliodcs/perl/ch-1.pl8
1 files changed, 2 insertions, 6 deletions
diff --git a/challenge-079/juliodcs/perl/ch-1.pl b/challenge-079/juliodcs/perl/ch-1.pl
index 5409ee8c5a..d88040dd85 100644
--- a/challenge-079/juliodcs/perl/ch-1.pl
+++ b/challenge-079/juliodcs/perl/ch-1.pl
@@ -14,16 +14,15 @@ 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
@@ -40,7 +39,6 @@ sub next_number($number) {
sub calculate ( $number, $total = 0 ) {
if ( $number == 0 ) {
- say {*STDERR} W_ACCURATE if $total > INTEGER_LAST;
return $total % MODULE;
}
@@ -57,6 +55,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);