| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | --- | 
					
						
							|  |  |  | id: 5a23c84252665b21eecc802a | 
					
						
							|  |  |  | title: Stream Merge | 
					
						
							|  |  |  | challengeType: 5 | 
					
						
							| 
									
										
										
										
											2019-08-05 09:17:33 -07:00
										 |  |  | forumTopicId: 302326 | 
					
						
							| 
									
										
										
										
											2021-01-13 03:31:00 +01:00
										 |  |  | dashedName: stream-merge | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | # --description--
 | 
					
						
							| 
									
										
										
										
											2019-07-18 17:32:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | Write a function that takes multiple sorted arrays of items, and returns one array of sorted items. | 
					
						
							| 
									
										
										
										
											2020-03-30 11:23:18 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | # --hints--
 | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | `mergeLists` should be a function. | 
					
						
							| 
									
										
										
										
											2020-03-30 11:23:18 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ```js | 
					
						
							|  |  |  | assert(typeof mergeLists == 'function'); | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | `mergeLists([[1, 3, 5, 9, 10], [2, 4, 6, 7, 8]])` should return an array. | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ```js | 
					
						
							|  |  |  | assert( | 
					
						
							|  |  |  |   Array.isArray( | 
					
						
							|  |  |  |     mergeLists([ | 
					
						
							|  |  |  |       [1, 3, 5, 9, 10], | 
					
						
							|  |  |  |       [2, 4, 6, 7, 8] | 
					
						
							|  |  |  |     ]) | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2020-03-30 11:23:18 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | `mergeLists([[1, 3, 5, 9, 10], [2, 4, 6, 7, 8]])` should return `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`. | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ```js | 
					
						
							|  |  |  | assert.deepEqual( | 
					
						
							|  |  |  |   mergeLists([ | 
					
						
							|  |  |  |     [1, 3, 5, 9, 10], | 
					
						
							|  |  |  |     [2, 4, 6, 7, 8] | 
					
						
							|  |  |  |   ]), | 
					
						
							|  |  |  |   [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | 
					
						
							|  |  |  | ); | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | `mergeLists([[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]])` should return `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]`. | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ```js | 
					
						
							|  |  |  | assert.deepEqual( | 
					
						
							|  |  |  |   mergeLists([ | 
					
						
							|  |  |  |     [1, 4, 7, 10], | 
					
						
							|  |  |  |     [2, 5, 8, 11], | 
					
						
							|  |  |  |     [3, 6, 9, 12] | 
					
						
							|  |  |  |   ]), | 
					
						
							|  |  |  |   [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | `mergeLists([[1, 3, 9, 14, 15, 17, 28], [7, 8, 14, 14, 23, 26, 28, 29, 30], [9, 23, 25, 29]])` should return `[1, 3, 7, 8, 9, 9, 14, 14, 14, 15, 17, 23, 23, 25, 26, 28, 28, 29, 29, 30]`. | 
					
						
							| 
									
										
										
										
											2020-03-30 11:23:18 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ```js | 
					
						
							|  |  |  | assert.deepEqual( | 
					
						
							|  |  |  |   mergeLists([ | 
					
						
							|  |  |  |     [1, 3, 9, 14, 15, 17, 28], | 
					
						
							|  |  |  |     [7, 8, 14, 14, 23, 26, 28, 29, 30], | 
					
						
							|  |  |  |     [9, 23, 25, 29] | 
					
						
							|  |  |  |   ]), | 
					
						
							|  |  |  |   [1, 3, 7, 8, 9, 9, 14, 14, 14, 15, 17, 23, 23, 25, 26, 28, 28, 29, 29, 30] | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2019-07-18 17:32:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | `mergeLists([[3, 14, 15], [2, 17, 18], [], [2, 3, 5, 7]])` should return `[2, 2, 3, 3, 5, 7, 14, 15, 17, 18]`. | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | assert.deepEqual(mergeLists([[3, 14, 15], [2, 17, 18], [], [2, 3, 5, 7]]), [ | 
					
						
							|  |  |  |   2, | 
					
						
							|  |  |  |   2, | 
					
						
							|  |  |  |   3, | 
					
						
							|  |  |  |   3, | 
					
						
							|  |  |  |   5, | 
					
						
							|  |  |  |   7, | 
					
						
							|  |  |  |   14, | 
					
						
							|  |  |  |   15, | 
					
						
							|  |  |  |   17, | 
					
						
							|  |  |  |   18 | 
					
						
							|  |  |  | ]); | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2020-09-15 09:57:40 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | `mergeLists([[1, 19, 1999], [17, 33, 2999, 3000], [8, 500, 3999]])` should return `[1, 8, 17, 19, 33, 500, 1999, 2999, 3000, 3999]`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							|  |  |  | assert.deepEqual( | 
					
						
							|  |  |  |   mergeLists([ | 
					
						
							|  |  |  |     [1, 19, 1999], | 
					
						
							|  |  |  |     [17, 33, 2999, 3000], | 
					
						
							|  |  |  |     [8, 500, 3999] | 
					
						
							|  |  |  |   ]), | 
					
						
							|  |  |  |   [1, 8, 17, 19, 33, 500, 1999, 2999, 3000, 3999] | 
					
						
							|  |  |  | ); | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | # --seed--
 | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ## --seed-contents--
 | 
					
						
							| 
									
										
										
										
											2020-03-30 11:23:18 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 19:02:05 +01:00
										 |  |  | ```js | 
					
						
							|  |  |  | function mergeLists(lists) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # --solutions--
 | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							| 
									
										
										
										
											2019-03-10 19:14:48 +09:00
										 |  |  | function mergeLists(lists) { | 
					
						
							| 
									
										
										
										
											2020-03-30 11:23:18 -05:00
										 |  |  |   function merge(l1, l2) { | 
					
						
							|  |  |  |     var result = [], | 
					
						
							|  |  |  |       i = 0, | 
					
						
							|  |  |  |       j = 0; | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  |     while (l1.length && l2.length) { | 
					
						
							| 
									
										
										
										
											2020-03-30 11:23:18 -05:00
										 |  |  |       if (l1[i] <= l2[j]) { | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  |         result.push(l1.shift()); | 
					
						
							| 
									
										
										
										
											2020-03-30 11:23:18 -05:00
										 |  |  |       } else { | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  |         result.push(l2.shift()); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     result.push.apply(result, l1); | 
					
						
							|  |  |  |     result.push.apply(result, l2); | 
					
						
							|  |  |  |     return result; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 11:23:18 -05:00
										 |  |  |   var result = lists[0]; | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  |   for (var i = 1; i < lists.length; i++) { | 
					
						
							| 
									
										
										
										
											2020-03-30 11:23:18 -05:00
										 |  |  |     result = merge(result, lists[i]); | 
					
						
							| 
									
										
										
										
											2018-12-30 19:05:56 +05:30
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return result; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` |