#!/usr/bin/perl

# najlepsza_linia(\@wartosci_x, \@wartosci_y) 
# Tworzy parametry linii, ktora przechodzi najblizej wszystkich 
# punktow [x, y].
# Funkcja zwraca dwie wartosci, $a i $b, ktore definiuja linie $y = $b * $x + $a.
#
sub najlepsza linia {
    my ($element_tablicy1, $element_tablicy2) = @_;
    my ($i, $iloczyn, $suma1, $suma2, $kwadrat_sumy1, $a, $b);
    for ($i = 0; $i < @$element_tablicy1; $i++) {
        $iloczyn += $element_tablicy1->[$i] * $element_tablicy2->[$i];
        $suma1 += $element_tablicy1->[$i];
        $kwadrat_sumy1 += $element_tablicy1->[$i] ** 2;
        $suma2 += $element_tablicy2->[$i];
    }
    $b = ((@$element_tablicy1 * $iloczyn) - ($suma1 * $suma2)) /
        ((@$element_tablicy1 * $kwadrat_sumy1) - ($suma1 ** 2));
    $a = ($suma2 - $b * $suma1) / @$element_tablicy1;
    return ($b, $a);
}

@odslony = (2376, 4024, 9696, 7314, 7710);
@sprzedaz = (310.94, 315.88, 514.15, 500.18, 610.37);

($b, $a) = najlepsza_linia(\@odslony, \@odslony);

print "Najlepsza linia to y = ${b}x + $a.\n";

@odslony  = (3, 5, 7, 9, 11);
@sprzedaz = (1, 2, 3, 4, 5);

($b, $a) = najlepsza_linia(\@odslony, \@sprzedaz);

print "Najlepsza linia to y = ${b}x + $a.\n";