Skip to content

Instantly share code, notes, and snippets.

@forethoughtde
Created February 3, 2020 07:35
Show Gist options
  • Save forethoughtde/01f02e14aca4dbe916f6818cc0cbb59f to your computer and use it in GitHub Desktop.
Save forethoughtde/01f02e14aca4dbe916f6818cc0cbb59f to your computer and use it in GitHub Desktop.
/*
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