Created
February 3, 2020 07:35
-
-
Save forethoughtde/01f02e14aca4dbe916f6818cc0cbb59f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Mix function | |
*/ | |
const deleteProperty = (obj, condition) => { | |
Object.keys(obj).forEach((key) => { | |
if(obj[key] === condition){ | |
delete obj[key]; | |
} | |
}); | |
return obj; | |
}; | |
const getFrequency = (str) => { | |
let obj = { | |
}; | |
let lowerCaseChars = str.join(""); | |
for(let character of lowerCaseChars){ | |
if(!obj.hasOwnProperty(character)){ | |
let regx = new RegExp(character, 'g'); | |
obj[character] = lowerCaseChars.match(regx).length; | |
} | |
} | |
return obj; | |
}; | |
const iterateFunc = (val, char) => { | |
let str = ''; | |
while (val > 0){ | |
str += `${char}`; | |
val--; | |
} | |
return str; | |
}; | |
const locateCommonItems = (obj1, obj2) => { | |
let objKeys = Object.keys(obj1).concat( Object.keys(obj2)); | |
let usedKeys = []; | |
let subString = []; | |
objKeys.forEach((key) => { | |
//Check if the key exists in both objects | |
if(obj2.hasOwnProperty(key) && !usedKeys.includes(key)){ | |
//If yes then check both object's value | |
if(obj1[key] === obj2[key]){ | |
subString.push(`=:${iterateFunc(obj1[key], key)}`); | |
} | |
else if(obj1[key] > obj2[key]){ | |
subString.push(`1:${iterateFunc(obj1[key], key)}`); | |
} | |
else{ | |
subString.push(`2:${iterateFunc(obj2[key], key)}`); | |
} | |
} | |
else if(!usedKeys.includes(key)){ | |
subString.push(`1:${iterateFunc(obj1[key], key)}`); | |
} | |
usedKeys.push(key); | |
}); | |
return subString; | |
} | |
const splitByNumberedOnes = (final) => { | |
let numberedOne = []; | |
for(let item of final){ | |
if(parseInt(item.charAt(0))){ | |
numberedOne.push(item); | |
} | |
} | |
return numberedOne.sort((a, b) => { | |
if(a.length > b.length){ | |
return -1; | |
} | |
if(b.length > a.length){ | |
return 1; | |
} | |
if(b.length === a.length){ | |
if(a.charAt(0) > b.charAt(0)) { | |
return 1; | |
} | |
if(a.charAt(0) < b.charAt(0)) { | |
return -1; | |
} | |
if(a.charAt(0) === b.charAt(0)) { | |
if(a.charAt(2) > b.charAt(2)) { | |
return 1; | |
} | |
if(a.charAt(2) < b.charAt(2)) { | |
return -1; | |
} | |
return 0; | |
} | |
} | |
}) | |
}; | |
const splitEqualOnes = (final) => { | |
let numberedOne = []; | |
for(let item of final){ | |
if(!parseInt(item.charAt(0))){ | |
numberedOne.push(item); | |
} | |
} | |
return numberedOne.sort((a, b) => { | |
if(a.length > b.length){ | |
return -1; | |
} | |
if(b.length > a.length){ | |
return 1; | |
} | |
if(b.length === a.length){ | |
if(a.charAt(0) > b.charAt(0)) { | |
return -1; | |
} | |
if(a.charAt(0) < b.charAt(0)) { | |
return 1; | |
} | |
if(a.charAt(0) === b.charAt(0)) { | |
if(a.charAt(2) > b.charAt(2)) { | |
return 1; | |
} | |
if(a.charAt(2) < b.charAt(2)) { | |
return -1; | |
} | |
return 0; | |
} | |
} | |
}); | |
}; | |
const combineTwoArrays = (arr1, arr2) => { | |
var addedElement = []; | |
arr1.forEach((item, index) => { | |
for(var i of arr2){ | |
if(i.length > item.length && !arr1.includes(i)){ | |
arr1.splice(index, 0, i); | |
addedElement.push(i); | |
} | |
} | |
}); | |
addedElement.forEach((item) => { | |
arr2.splice(arr2.indexOf(item), 1); | |
}); | |
return arr1.concat(arr2).join('/'); | |
}; | |
function mix(s1, s2) { | |
let obj1 = (deleteProperty(getFrequency(s1.match(/[a-z]/g)), 1)); | |
let obj2 = (deleteProperty(getFrequency(s2.match(/[a-z]/g)), 1)); | |
let combinedList = locateCommonItems(obj1, obj2); | |
let numberedOnes = splitByNumberedOnes(combinedList); | |
let equalOnes = splitEqualOnes(combinedList); | |
return combineTwoArrays(numberedOnes, equalOnes); | |
} | |
mix("Are they here", "yes, they are here"); | |
mix("looping is fun but dangerous", "less dangerous than coding"); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment