aboutsummaryrefslogtreecommitdiff
path: root/challenge-157/luca-ferrari/postgresql/ch-2.sql
blob: a3e7bf6fc31daa1d569e3613856347e8956d4d7f (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
32
33
34
35
36
37
38
39
40
CREATE SCHEMA IF NOT EXISTS pwc157;


CREATE OR REPLACE FUNCTION
pwc157.brazilian( int )
RETURNS int
AS $CODE$
use Math::Base::Convert;
use Syntax::Keyword::Try;

for my $base ( 2 .. $_[0] - 1 ) {
    elog( DEBUG, "Base $base " );
    try {
        my $bc = Math::Base::Convert->new( 10, $base );
        my $n = $bc->cnv( $_[0] );
        elog( DEBUG, "Converted value $_[0] -> $n in base $base" );
        my @digits = split( //, $n );
        my %symbols;
        for my $d (@digits) {
            $symbols{ $d }++;
        }

        my $seen = 0;
        for my $k ( keys %symbols ) {
          $seen++ if $symbols{ $k } > 0;
        }

        return 1 if $seen == 1;

    } catch {
        elog( DEBUG, "Exception");
        next;
    }

}

return 0;

$CODE$
LANGUAGE plperlu;