forked from TheAlgorithms/JavaScript
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCheckExceeding.js
More file actions
Latest commit
40 lines (32 loc) · 1.27 KB
/
Copy pathCheckExceeding.js
File metadata and controls
40 lines (32 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* @function checkExceeding
* @description - Exceeding words are words where the gap between two adjacent characters is increasing. The gap is the distance in ascii
* @param {string} str
* @returns {boolean}
* @example - checkExceeding('delete') => true, ascii difference - [1, 7, 7, 15, 15] which is incremental
* @example - checkExceeding('update') => false, ascii difference - [5, 12, 3, 19, 15] which is not incremental
*/
constcheckExceeding=(str)=>{
if(typeofstr!=='string'){
thrownewTypeError('Argument is not a string')
}
constupperChars=str.toUpperCase().replace(/[^A-Z]/g,'')// remove all from str except A to Z alphabets
constadjacentDiffList=[]
for(leti=0;i<upperChars.length-1;i++){
// destructuring current char & adjacent char by index, cause in javascript String is an object.
const{[i]: char,[i+1]: adjacentChar}=upperChars
if(char!==adjacentChar){
adjacentDiffList.push(
Math.abs(char.charCodeAt()-adjacentChar.charCodeAt())
)
}
}
for(leti=0;i<adjacentDiffList.length-1;i++){
const{[i]: charDiff,[i+1]: secondCharDiff}=adjacentDiffList
if(charDiff>secondCharDiff){
returnfalse
}
}
returntrue
}
export{checkExceeding}