DEV Community

Discussion on: Daily Challenge #215 - Difference of 2

Collapse
 
differentmatt profile image
Matt Lott

JS solution

const pairDifference = (nums) => {
  const results = []
  if (!nums || nums.length < 2) return results
  nums.sort()
  for (let i = 0; i < nums.length - 1; i++) {
    // 2nd num can only be 1 or 2 positions away when sorted and no duplicates
    if (nums[i + 1] - nums[i] === 2) {
      results.push([nums[i], nums[i + 1]])
    }
    else if (i < nums.length - 2 && nums[i + 2] - nums[i] === 2) {
      results.push([nums[i], nums[i + 2]])
    }
  }
  return results
}

const pairsEqual = (p1, p2) => p1[0] === p2[0] && p1[1] === p2[1]

const test = (nums, expected) => {
  const results = pairDifference(nums)
  const passed = results.length === expected.length &&
    !results.find((p, i) => !pairsEqual(p, expected[i]))
  console.log(`${passed? 'Pass' : 'FAIL'} - input: ${JSON.stringify(nums)} ` +
  `expected: ${JSON.stringify(expected)} results: ${JSON.stringify(results)}`)
}

test([1, 2, 3, 4], [[1, 3], [2, 4]])
test([1, 3, 4, 6], [[1, 3], [4, 6]])
test([4, 1, 2, 3], [[1, 3], [2, 4]])
test([1, 23, 3, 4, 7], [[1, 3]])
test([4, 3, 1, 5, 6], [[1, 3], [3, 5], [4, 6]])
test(undefined, [])
test([], [])
test([1], [])
test([2, -1, 0, 1], [[-1, 1], [0, 2]])
test([2000, -100, -98, 1999], [[-100, -98]])