diff --git a/src/main.py b/src/main.py index 888fadc..30a3445 100644 --- a/src/main.py +++ b/src/main.py @@ -1,4 +1,5 @@ from sympy import diff, limit, oo, symbols +import unittest from modules.math import ( test_math_module @@ -12,8 +13,8 @@ from modules.statistics import ( from modules.strings import t_strings if __name__=="__main__": - t_strings() - + # t_strings() # test_math_module() # test_probability_module() - test_statistics_module() + # test_statistics_module() + # test_exercises_module() diff --git a/src/modules/exercises/essentials.py b/src/modules/exercises/essentials.py new file mode 100644 index 0000000..b3039e3 --- /dev/null +++ b/src/modules/exercises/essentials.py @@ -0,0 +1,11 @@ +def maximum_subarray_sum(input_array: list[int]): + max_sum = input_array[0] + subarray = [input_array[0]] + for origin in range(0, len(input_array)): + for end in range(origin + 1, len(input_array) + 1): + temp_subarray = input_array[origin:end] + temp_sum = sum(temp_subarray) + if (temp_sum > max_sum): + max_sum = temp_sum + subarray = temp_subarray + return [max_sum, subarray] diff --git a/src/modules/statistics.py b/src/modules/statistics.py index d6c8335..322af79 100644 --- a/src/modules/statistics.py +++ b/src/modules/statistics.py @@ -1,2 +1,39 @@ +from math import sqrt, pi, e + +def population_variance(difference_list, mean): + summatory = 0.0 + for diff in difference_list: + summatory += (diff - mean) ** 2 + return summatory / len(difference_list) + +def population_variance_inline(difference_list): + return sum((v - (sum(difference_list) / len(difference_list))) ** 2 for v in difference_list) / len(difference_list) + +def sample_variance(difference_list): + mean = sum(difference_list) / len(difference_list) + return sum((diff - mean) ** 2 for diff in difference_list) / (len(difference_list) - 1) + +def population_standard_deviation(difference_list): + return sqrt(population_variance_inline(difference_list)) + +def sample_standard_deviation(difference_list): + return sqrt(sample_variance(difference_list)) + +def standard_deviation(difference_list, is_sample): + return sample_standard_deviation(difference_list) if is_sample else population_standard_deviation(difference_list) + +# PDF generates the Normal Distribution (symetric arround the mean) +def probability_density_function(x: float, mean: float, standard_deviation: float): + return (1 / (standard_deviation * sqrt(2 * pi))) * (e ** ((-1/2) * (x - (mean ** 2)) / standard_deviation)) + + def test_statistics_module(): print("=== Statistics module ===") + differences = [ -6.571, -5.571, -1.571, 0.429, 2.429, 3.429, 7.429 ] + print("The population variance is", population_variance(differences, sum(differences) / len(differences)), population_variance_inline(differences)) + print("The standard deviation is", standard_deviation(differences, False)) + sample = differences.copy() + del sample[3] + del sample[1] + print("The sample variance for a population is", sample_variance(sample)) + print("The standard deviation for a population is", standard_deviation(sample, True)) diff --git a/tests/test_essentials.py b/tests/test_essentials.py new file mode 100644 index 0000000..13345e4 --- /dev/null +++ b/tests/test_essentials.py @@ -0,0 +1,19 @@ +import pytest + +from src.modules.exercises.essentials import * + +def test_subarray_sum(): + input = [2,3,-8,7,-1,2,3] + result = maximum_subarray_sum(input) + expected = [11, [7, -1, 2, 3]] + assert result == expected + input = [-2,-4] + result = maximum_subarray_sum(input) + expected = [-2, [-2]] + assert result == expected + input = [5,4,1,7,8] + result = maximum_subarray_sum(input) + expected = [25, [5,4,1,7,8]] + assert result == expected + +