From 2876c14c0e182816ac7ec19682d085a3e75b7c07 Mon Sep 17 00:00:00 2001 From: bullcodeProgramacion Date: Mon, 15 Aug 2022 13:46:37 +0100 Subject: [PATCH] new algorithm that move the array to left according the numbers of position provided --- .../array-rotation/ArrayRotation.js | 27 +++++++++++++++++++ .../__test__/ArrayRotation.test.js | 16 +++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/data-structures/array-rotation/ArrayRotation.js create mode 100644 src/data-structures/array-rotation/__test__/ArrayRotation.test.js diff --git a/src/data-structures/array-rotation/ArrayRotation.js b/src/data-structures/array-rotation/ArrayRotation.js new file mode 100644 index 00000000..d9dbf099 --- /dev/null +++ b/src/data-structures/array-rotation/ArrayRotation.js @@ -0,0 +1,27 @@ +import Comparator from '../../../utils/comparator/Comparator'; + +/** + * Give an array of integers numbers, the task is rotate the array elements to the left + * according to the number of positions provided + * + * @param {*[]} array + * @param {*} seekElement + * @param {function(a, b)} [comparatorCallback] + * @return {number[]} +*/ +export default function arrayRotation(arr,d,comparatorCallback){ + const comparator = new Comparator(comparatorCallback); + if(d>arr.length-1) return false; + let p = 1; + + while(p<=d){ + let first = arr[0]; + + for(let i=0;i<=arr.length-1;i++){ + if(comparator.equal(i,arr.length-1)) arr[i] = first + else arr[i] = arr[i+1]; + } + p = p+1; + } + return arr; +} \ No newline at end of file diff --git a/src/data-structures/array-rotation/__test__/ArrayRotation.test.js b/src/data-structures/array-rotation/__test__/ArrayRotation.test.js new file mode 100644 index 00000000..63ebeb8e --- /dev/null +++ b/src/data-structures/array-rotation/__test__/ArrayRotation.test.js @@ -0,0 +1,16 @@ +import arrayRotation from '../ArrayRotation'; + +describe('arrayRotation', () => { + it('should move to left all numbers according to the number of positions provided', () => { + const array =[1,2,3,4,5,6,7,8]; + + expect(arrayRotation(array,4)).toEqual([5,6,7,8,1,2,3,4]); + expect(arrayRotation(array,2)).toEqual([3,4,5,6,7,8,1,2]); + expect(arrayRotation(array,3)).toEqual([,4,5,6,7,8,1,2,3]); + }); + + it('should return false if the number of positions to move greater than the size of the array', () => { + const array =[1,2,3,4,5,6,7,8]; + expect(arrayRotation(array,10)).toEqual(false); + }); +});