blob: 8ad966193c1a40720f2d1f7d9f02ad8e5ff14dcc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#!/usr/bin/perl
use warnings;
use strict;
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 $chars = [@digits36[0 .. $base - 1]];
my $start = join "", reverse @$chars;
my $n = int sqrt cnv($start, $chars, 10);
while ($n) {
my $square = cnv($n * $n, 10, $chars);
--$n, next if $square =~ /(.).*\1/;
return $square
}
}
use Test::More tests => 5;
is largest_square(2), '1';
is largest_square(4), '3201';
is largest_square(10), '9814072356';
is largest_square(12), 'B8750A649321';
is largest_square(16), 'FED5B39A42706C81';
|