diff options
| author | E. Choroba <choroba@matfyz.cz> | 2022-01-30 13:50:17 +0100 |
|---|---|---|
| committer | E. Choroba <choroba@matfyz.cz> | 2022-01-30 13:52:25 +0100 |
| commit | 850134ebe13ce2aedc5b0bef924bd0660a27047a (patch) | |
| tree | 93219e49a7a816ed5f1c5291cda9463a6e769a60 | |
| parent | 3176b537705663af28a074f1ee9728a5bd75b99c (diff) | |
| download | perlweeklychallenge-club-850134ebe13ce2aedc5b0bef924bd0660a27047a.tar.gz perlweeklychallenge-club-850134ebe13ce2aedc5b0bef924bd0660a27047a.tar.bz2 perlweeklychallenge-club-850134ebe13ce2aedc5b0bef924bd0660a27047a.zip | |
Fix 149/2 by switching to Math::Base::Convert
It can handle larger integers without a problem.
| -rwxr-xr-x | challenge-149/e-choroba/perl/ch-2.pl | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/challenge-149/e-choroba/perl/ch-2.pl b/challenge-149/e-choroba/perl/ch-2.pl index 06a9eb3d62..8ad966193c 100755 --- a/challenge-149/e-choroba/perl/ch-2.pl +++ b/challenge-149/e-choroba/perl/ch-2.pl @@ -2,21 +2,19 @@ use warnings; use strict; -use Math::Int2Base qw{ int2base base2int }; +use Math::Base::Convert qw{ cnv }; +my @digits36 = (0 .. 9, 'A' .. 'Z'); sub largest_square { my ($base) = @_; die "Base can't be more than 36.\n" if $base > 36; - my $start = join "", map int2base($_, 36), reverse 0 .. $base - 1; - my $n = int sqrt base2int($start, $base); - if ($n =~ /E/) { - use bigint; - $n = int sqrt base2int($start, $base); - } + my $chars = [@digits36[0 .. $base - 1]]; + my $start = join "", reverse @$chars; + my $n = int sqrt cnv($start, $chars, 10); while ($n) { - my $square = int2base($n * $n, $base); + my $square = cnv($n * $n, 10, $chars); --$n, next if $square =~ /(.).*\1/; @@ -30,4 +28,4 @@ is largest_square(2), '1'; is largest_square(4), '3201'; is largest_square(10), '9814072356'; is largest_square(12), 'B8750A649321'; -is largest_square(16), 'FEB6795D4C32A801'; +is largest_square(16), 'FED5B39A42706C81'; |
