80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | id: 594d8d0ab97724821379b1e6 | ||
|  | title: Averages/Mode | ||
|  | challengeType: 5 | ||
|  | forumTopicId: 302226 | ||
|  | dashedName: averagesmode | ||
|  | --- | ||
|  | 
 | ||
|  | # --description--
 | ||
|  | 
 | ||
|  | Write a program to find the [mode](https://en.wikipedia.org/wiki/Mode (statistics) "wp: Mode (statistics)") value of a collection. | ||
|  | 
 | ||
|  | The case where the collection is empty may be ignored. Care must be taken to handle the case where the mode is non-unique. | ||
|  | 
 | ||
|  | If it is not appropriate or possible to support a general collection, use a vector (array), if possible. If it is not appropriate or possible to support an unspecified value type, use integers. | ||
|  | 
 | ||
|  | # --hints--
 | ||
|  | 
 | ||
|  | `mode` should be a function. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(typeof mode === 'function'); | ||
|  | ``` | ||
|  | 
 | ||
|  | `mode([1, 3, 6, 6, 6, 6, 7, 7, 12, 12, 17])` should equal `[6]` | ||
|  | 
 | ||
|  | ```js | ||
|  | assert.deepEqual(mode(arr1), [6]); | ||
|  | ``` | ||
|  | 
 | ||
|  | `mode([1, 2, 4, 4, 1])` should equal `[1, 4]`. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert.deepEqual(mode(arr2).sort(), [1, 4]); | ||
|  | ``` | ||
|  | 
 | ||
|  | # --seed--
 | ||
|  | 
 | ||
|  | ## --after-user-code--
 | ||
|  | 
 | ||
|  | ```js | ||
|  | const arr1 = [1, 3, 6, 6, 6, 6, 7, 7, 12, 12, 17]; | ||
|  | const arr2 = [1, 2, 4, 4, 1]; | ||
|  | ``` | ||
|  | 
 | ||
|  | ## --seed-contents--
 | ||
|  | 
 | ||
|  | ```js | ||
|  | function mode(arr) { | ||
|  | 
 | ||
|  |   return true; | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | # --solutions--
 | ||
|  | 
 | ||
|  | ```js | ||
|  | function mode(arr) { | ||
|  |   const counter = {}; | ||
|  |   let result = []; | ||
|  |   let max = 0; | ||
|  |   // for (const i in arr) { | ||
|  |   arr.forEach(el => { | ||
|  |     if (!(el in counter)) { | ||
|  |       counter[el] = 0; | ||
|  |     } | ||
|  |     counter[el]++; | ||
|  | 
 | ||
|  |     if (counter[el] === max) { | ||
|  |       result.push(el); | ||
|  |     } | ||
|  |     else if (counter[el] > max) { | ||
|  |       max = counter[el]; | ||
|  |       result = [el]; | ||
|  |     } | ||
|  |   }); | ||
|  |   return result; | ||
|  | } | ||
|  | ``` |