From ad218b4fe88fa02e4c82db4e68828e043411775b Mon Sep 17 00:00:00 2001 From: michaelik Date: Fri, 18 Feb 2022 13:19:27 +0100 Subject: [PATCH 1/2] Refector code and implement modal average --- src/Average.php | 14 ++++++++++++-- tests/AverageTest.php | 14 +++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/Average.php b/src/Average.php index 17b5229..670c393 100644 --- a/src/Average.php +++ b/src/Average.php @@ -9,7 +9,7 @@ class Average * @param array $numbers Array of numbers * @return float Mean average */ - public function mean(array $numbers) + public function mean(array $numbers): float { return array_sum($numbers) / count($numbers); } @@ -19,7 +19,7 @@ public function mean(array $numbers) * @param array $numbers Array of numbers * @return float Median average */ - public function median(array $numbers) + public function median(array $numbers): float { sort($numbers); $size = count($numbers); @@ -31,4 +31,14 @@ public function median(array $numbers) ); } } + /** + * Calculate the median average + * @param array $numbers Array of numbers + * @return float Median average + */ + public function mode(array $numbers): int + { + $values = array_count_values($numbers); + return array_search(max($values), $values); + } } diff --git a/tests/AverageTest.php b/tests/AverageTest.php index 044bcc5..b877832 100644 --- a/tests/AverageTest.php +++ b/tests/AverageTest.php @@ -18,9 +18,21 @@ public function testCalculationOfMean() $this->assertEquals(4.4, $this->Average->mean($numbers)); } - public function testCalculationOfMedian() + public function testCalculationOfMedianForOddNumberOfValues() { $numbers = [3, 7, 6, 1, 5]; $this->assertEquals(5, $this->Average->median($numbers)); } + + public function testCalculationOfMedianForEvenNumberOfValues() + { + $numbers = [3, 7, 6, 5]; + $this->assertEquals(5.5, $this->Average->median($numbers)); + } + + public function testCalculationOfMode() + { + $numbers = [1, 3, 3, 3, 4, 4, 6, 6, 9]; + $this->assertEquals(3, $this->Average->mode($numbers)); + } } From 0813c80513ec855a862c3946e9e50d6e83374bfe Mon Sep 17 00:00:00 2001 From: michaelik Date: Fri, 18 Feb 2022 13:34:10 +0100 Subject: [PATCH 2/2] Clean median method --- src/Average.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Average.php b/src/Average.php index 670c393..6724d8e 100644 --- a/src/Average.php +++ b/src/Average.php @@ -25,11 +25,10 @@ public function median(array $numbers): float $size = count($numbers); if ($size % 2) { return $numbers[$size / 2]; - } else { - return $this->mean( + } + return $this->mean( array_slice($numbers, ($size / 2) - 1, 2) ); - } } /** * Calculate the median average