diff --git a/Maths/AverageMedian.js b/Maths/AverageMedian.js new file mode 100644 index 000000000..582000968 --- /dev/null +++ b/Maths/AverageMedian.js @@ -0,0 +1,39 @@ +/* + * Median: https://en.wikipedia.org/wiki/Median + * + * function averageMedian + * to find the median value of an array of numbers + * the numbers in an array will be sorted in ascending order by the function sortNumbers + * if the length of the array is even number, the median value will be the average of the two middle numbers + * else if the length of the array is odd number, the median value will be the middle number in the array + */ + +/* + * Doctests + * + * > averageMedian([8, 9, 1, 2, 5, 10, 11]) + * 8 + * > averageMedian([15, 18, 3, 9, 13, 5]) + * 11 + * > averageMedian([1,2,3,4,6,8]) + * 3.5 + */ + +const averageMedian = (numbers) => { + let median = 0; const numLength = numbers.length + numbers = numbers.sort(sortNumbers) + + if (numLength % 2 === 0) { + median = (numbers[numLength / 2 - 1] + numbers[numLength / 2]) / 2 + } else { + median = numbers[(numLength - 1) / 2] + } + + return median +} + +const sortNumbers = (num1, num2) => { + return num1 - num2 +} + +export { averageMedian } diff --git a/Maths/test/AverageMedian.test.js b/Maths/test/AverageMedian.test.js new file mode 100644 index 000000000..7e525fa5f --- /dev/null +++ b/Maths/test/AverageMedian.test.js @@ -0,0 +1,21 @@ +import { averageMedian } from '../AverageMedian' + +test('should return the median of an array of numbers:', () => { + const medianValue = averageMedian([1, 2, 6, 4, 5]) + expect(medianValue).toBe(4) +}) + +test('should return the median of an array of numbers:', () => { + const medianValue = averageMedian([8, 9, 1, 2, 5, 10, 11]) + expect(medianValue).toBe(8) +}) + +test('should return the median of an array of numbers:', () => { + const medianValue = averageMedian([15, 18, 3, 9, 13, 5]) + expect(medianValue).toBe(11) +}) + +test('should return the median of an array of numbers:', () => { + const medianValue = averageMedian([1, 2, 3, 4, 6, 8]) + expect(medianValue).toBe(3.5) +})