diff --git a/snippets/midpoint.md b/snippets/midpoint.md new file mode 100644 index 000000000..05f5dcf8f --- /dev/null +++ b/snippets/midpoint.md @@ -0,0 +1,16 @@ +### midpoint + +Calculates the midpoint between two pairs of (x,y) points. + +Destructure the array to get `x1`, `y1`, `x2` and `y2`, calculate the midpoint for each dimension by dividing the sum of the two endpoints by `2`. + +```js +const midpoint = ([x1, y1], [x2, y2]) => [(x1 + x2) / 2, (y1 + y2) / 2]; +``` + +```js +midpoint([2, 2], [4, 4]); // [3, 3] +midpoint([4, 4], [6, 6]); // [5, 5] +midpoint([1, 3], [2, 4]); // [1.5, 3.5] +``` + diff --git a/tag_database b/tag_database index 3bd92f025..50a40f0c5 100644 --- a/tag_database +++ b/tag_database @@ -188,6 +188,7 @@ maxN:array,math,beginner median:math,array,intermediate memoize:function,advanced merge:object,array,intermediate +midpoint:math,array,beginner minBy:math,array,function,beginner minDate:date,math,beginner minN:array,math,beginner diff --git a/test/midpoint.test.js b/test/midpoint.test.js new file mode 100644 index 000000000..7926f2a50 --- /dev/null +++ b/test/midpoint.test.js @@ -0,0 +1,34 @@ +const expect = require('expect'); +const { midpoint } = require('./_30s.js'); + +test('midpoint is a Function', () => { + expect(midpoint).toBeInstanceOf(Function); +}); + +test('midpoint([2, 2], [4, 4]) = [3, 3]', () => { + expect(midpoint([2, 2], [4, 4])).toEqual([3, 3]); +}); + +test('midpoint([4, 4], [6, 6]) = [5,5]', () => { + expect(midpoint([4, 4], [6, 6])).toEqual([5, 5]); +}); + +test('midpoint([1, 3], [2, 4]) = [3,3]', () => { + expect(midpoint([1, 3], [2, 4])).toEqual([1.5, 3.5]); +}); + +test('midpoint([-2, 0], [-2, 4]) = [-2,2]', () => { + expect(midpoint([-2, 0], [-2, 4])).toEqual([-2, 2]); +}); + +test('midpoint([0, 0], [0, 0]) = [0,0]', () => { + expect(midpoint([0, 0], [0, 0])).toEqual([0, 0]); +}); + +test('midpoint([10, -10], [20, 30]) = [15, 10]', () => { + expect(midpoint([10, -10], [20, 30])).toEqual([15, 10]); +}); + +test('midpoint([7.5, -1.3], [2.7, 11.1]) = [5.1, 4.8999999999999995]', () => { + expect(midpoint([7.5, -1.3], [2.7, 11.1])).toEqual([5.1, 4.8999999999999995]); +});