aboutsummaryrefslogtreecommitdiff
path: root/challenge-149/e-choroba/perl/ch-2.pl
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';