#!/usr/bin/perl


# $mediana = mediana_nieparzysta(\@tablica)
# Oblicza mediane nieparzysta dla tablicy z wartosciami.
#
sub mediana_nieparzysta {
    my $element = shift;
    my @tablica = sort { $a <=> $b } @$element;
    return $tablica[(@tablica - (0,0,1,0)[@tablica & 3]) / 2];
}

# $dominanta = dominanta(\@tablica) 
# Oblicza dominant dla tablicy wartoci.
#
sub dominanta {
    my $element = shift;
    my (%licznik, @wynik);

    # Wykorzystanie tablicy asocjacyjnej %licznik do zapisania czestosci
    # wystepowania poszczegolnych elementow.
    foreach (@$element) { $licznik{$_}++ }

    # Posortowanie elementow wedlug czestosci ich wystepowania 
    # i wykonanie petli dla posortowanej listy.
    foreach (sort { $licznik{$b} <=> $licznik{$a} } keys %licznik) {
        last if @wynik && $licznik{$_} != $licznik{$wynik[0]};
        push(@wynik, $_);
    }

    # Usuniecie znaku komentarza z ponizszego wiersza spowoduje zwrocenie
    # undef w przypadku obecnosci kilku dominant.
    # return undef if @wynik > 1;

    # Zwrocenie mediany nieparzystej dla dominant. Funkcja mediana_nieparzysta() 
    # zostala zdefiniowana wczesniej.
    return mediana_nieparzysta \@wynik;
}

@punkty = (10, 10, 31, 28, 46, 22, 27, 28, 42, 31, 8, 27, 45, 34, 6, 23);

print dominanta(\@punkty), "\n";


