diff --git a/Maths/AverageMode.js b/Maths/AverageMode.js new file mode 100644 index 0000000000..3c2b43e4ee --- /dev/null +++ b/Maths/AverageMode.js @@ -0,0 +1,34 @@ +/* + A program to get the mode of the given array of data. + + In statistics, mode is the most often occurring value in a set of data values, + it may or may not have the same numerical value as mean or median in a normal distribution, depending on how skewed the distribution is. + Mode is not necessarily unique, since two values may appear the same number of times in a set of values, in which case, both shall be considered to be modes. + + Wikipedia: https://en.wikipedia.org/wiki/Mode_(statistics) +*/ + +/** + * @param {Array} data + */ +const averageMode = (data) => { + const counts = new Map() + const mode = [] + let max = 0 + + for(const entry of data) { + const count = counts.get(entry) ?? 0 + counts.set(entry, count + 1) + + if(max < count + 1) + max = count + 1 + } + + for(const [key, value] of counts.entries()) + if(max === value) + mode.push(key) + + return mode.sort() +} + +export { averageMode } diff --git a/Maths/test/AverageMode.test.js b/Maths/test/AverageMode.test.js new file mode 100644 index 0000000000..724185f328 --- /dev/null +++ b/Maths/test/AverageMode.test.js @@ -0,0 +1,21 @@ +import { averageMode } from '../AverageMode' + +test('should return the mode of an array of numbers:', () => { + const mode = averageMode([1, 2, 6, 4, 5]) + expect(mode).toEqual([1, 2, 4, 5, 6]) +}) + +test('should return the mode of an array of numbers:', () => { + const mode = averageMode([2, 3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 2, 2, 2]) + expect(mode).toEqual([2]) +}) + +test('should return the mode of an array of numbers:', () => { + const mode = averageMode(['x', 'x' , 'y', 'y', 'z']) + expect(mode).toEqual(['x', 'y']) +}) + +test('should return the mode of an array of numbers:', () => { + const mode = averageMode([3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 4, 4, 2, 2, 4, 2]) + expect(mode).toEqual([2, 4]) +})

AltStyle によって変換されたページ (->オリジナル) /