63 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
function mergeArrays(xs: Array<number>, ys: Array<number>): Array<number> {
 | 
						|
  let i = 0;
 | 
						|
  let j = 0;
 | 
						|
  const result = [];
 | 
						|
 | 
						|
  for (let q = 0; q < xs.length + ys.length; q += 1) {
 | 
						|
    if (i === xs.length) {
 | 
						|
      while (j < ys.length) {
 | 
						|
        result.push(ys[j]);
 | 
						|
        j += 1;
 | 
						|
      }
 | 
						|
    } else if (j === ys.length) {
 | 
						|
      while (i < xs.length) {
 | 
						|
        result.push(xs[i]);
 | 
						|
        i += 1;
 | 
						|
      }
 | 
						|
    } else if (xs[i] < ys[j]) {
 | 
						|
      result.push(xs[i]);
 | 
						|
      i += 1;
 | 
						|
    } else {
 | 
						|
      result.push(ys[j]);
 | 
						|
      j += 1;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return result;
 | 
						|
}
 | 
						|
 | 
						|
// Tests
 | 
						|
let desc = "both arrays are empty";
 | 
						|
let actual = mergeArrays([], []);
 | 
						|
let expected = [];
 | 
						|
assertDeepEqual(actual, expected, desc);
 | 
						|
 | 
						|
desc = "first array is empty";
 | 
						|
actual = mergeArrays([], [1, 2, 3]);
 | 
						|
expected = [1, 2, 3];
 | 
						|
assertDeepEqual(actual, expected, desc);
 | 
						|
 | 
						|
desc = "second array is empty";
 | 
						|
actual = mergeArrays([5, 6, 7], []);
 | 
						|
expected = [5, 6, 7];
 | 
						|
assertDeepEqual(actual, expected, desc);
 | 
						|
 | 
						|
desc = "both arrays have some numbers";
 | 
						|
actual = mergeArrays([2, 4, 6], [1, 3, 7]);
 | 
						|
expected = [1, 2, 3, 4, 6, 7];
 | 
						|
assertDeepEqual(actual, expected, desc);
 | 
						|
 | 
						|
desc = "arrays are different lengths";
 | 
						|
actual = mergeArrays([2, 4, 6, 8], [1, 7]);
 | 
						|
expected = [1, 2, 4, 6, 7, 8];
 | 
						|
assertDeepEqual(actual, expected, desc);
 | 
						|
 | 
						|
function assertDeepEqual(a: Array<number>, b: Array<number>, desc: string) {
 | 
						|
  const aStr = JSON.stringify(a);
 | 
						|
  const bStr = JSON.stringify(b);
 | 
						|
  if (aStr !== bStr) {
 | 
						|
    console.log(`${desc} ... FAIL: ${aStr} != ${bStr}`);
 | 
						|
  } else {
 | 
						|
    console.log(`${desc} ... PASS`);
 | 
						|
  }
 | 
						|
}
 |