feat: more statistics + a simple exercise

This commit is contained in:
2025-11-23 17:10:25 +01:00
parent 86e86ea567
commit a26970f873
4 changed files with 71 additions and 3 deletions

View File

@@ -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()

View File

@@ -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]

View File

@@ -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))

19
tests/test_essentials.py Normal file
View File

@@ -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