Homelab, Linux, JS & ABAP (~˘▾˘)~

# [JavaScript] Intermediate Algorithm Scripting

These are my notes while doing the course JavaScript Algorithms and Data Structures on https://www.freecodecamp.org. I highly recommend it if you prefer to try things directly rather than watching videos.

1. Sum All Numbers in a Range

```function sumAll(arr) {

let num1 = Math.min(arr[0], arr[1]);
let num2 = Math.max(arr[0], arr[1]);
let result = 0;

while (num1 < num2) {
result += num1;
num1++;
}
return result += num2;
}

sumAll([1, 4]);
```

2. Diff Two Arrays

```function diffArray(arr1, arr2) {

var newArr = [];

for (let i = 0; i < arr1.length; i++) {
if (arr2.indexOf(arr1[i]) == -1) {
newArr.push(arr1[i]);
}
}

for (let i = 0; i < arr2.length; i++) {
if (arr1.indexOf(arr2[i]) == -1) {
newArr.push(arr2[i]);
}
}

return newArr;
}

diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
```

3. Seek and Destroy

```function destroyer(...arr) {

let newArr = arr.shift();

for (let i = 0; i < arr.length; i++) {
while (newArr.indexOf(arr[i]) > -1) {
newArr.splice(newArr.indexOf(arr[i]), 1);
};
}

return newArr;
}

destroyer([1, 2, 3, 1, 2, 3], 2, 3);
```

4. Wherefore art thou

```function whatIsInAName(collection, source) {

var arr = [];

var srcKeys = Object.keys(source);

for (let i = 0; i < collection.length; i++) {
let obj = collection[i];
let bool = true;

for (let j = 0; j < srcKeys.length; j++) {
let key = srcKeys[j];
if (!obj.hasOwnProperty(key) || (obj[key] != source[key])) {
bool = false;
}
}

if (bool) {
arr.push(obj);
}
}

return arr;
}

whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", //last: "Capulet" }], { last: "Capulet" });

whatIsInAName([{ "apple": 1, "bat": 2 }, { "bat": 2 }, { "apple": 1, "bat": 2, "cookie": 2 }], { "apple": 1, "bat": 2 });
```

5. Spinal Tap Case

```function spinalCase(str) {

let myRegex = /[A-Z][a-z]+|[a-z]+/g;
let arr = str.match(myRegex);

return arr.join("-").toLowerCase();
}

spinalCase('This Is Spinal Tap');
spinalCase("thisIsSpinalTap");
spinalCase("The_Andy_Griffith_Show");
spinalCase("Teletubbies say Eh-oh");
spinalCase("AllThe-small Things");
```

6. Pig Latin

```function translatePigLatin(str) {

let regexAY = /(^[^aeiou]+)/g;
let regexWAY = /(^[aeiou]+)/g;

if (regexAY.test(str)) {
let cutStr = str.match(regexAY);
let newStr = str.substr(cutStr[0].length);
return newStr + cutStr[0] + "ay";

} else if (regexWAY.test(str)) {
return str + "way";
}

}

translatePigLatin("consonant");
translatePigLatin("paragraphs");
translatePigLatin("glove");
translatePigLatin("algorithm");
translatePigLatin("eight");
translatePigLatin("rhythm");
```

7. Search and Replace

```function myReplace(str, before, after) {

if (/^[A-Z]/.test(before)) {
after = after.charAt(0).toUpperCase() + after.slice(1);
} else {
after = after.charAt(0).toLowerCase() + after.slice(1);
}

return str.replace(before, after);

}

myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
myReplace("Let us go to the store", "store", "mall");
myReplace("He is Sleeping on the couch", "Sleeping", "sitting");
```

8. DNA Pairing

```function pairElement(str) {

let arr = [];

for (let i = 0; i < str.length; i++) {

let tmp = [];
tmp.push(str[i]);

switch(str[i]) {
case "A":
tmp.push("T");
break;
case "T":
tmp.push("A");
break;
case "C":
tmp.push("G");
break;
case "G":
tmp.push("C");
}

arr.push(tmp);
}

return arr;
}

pairElement("GCG");
```

9. Missing letters

```function fearNotLetter(str) {

const alphabet = "abcdefghijklmnopqrstuvwxyz";

let startIndex = alphabet.indexOf(str[0]);

const compareStr = alphabet.slice(startIndex, startIndex + str.length);

for (let i = 0; i < compareStr.length; i++) {
if (compareStr[i] !== str[i]) {
return compareStr[i];
}
}

return undefined;
}

fearNotLetter("abce");
fearNotLetter("bcdf");
fearNotLetter("stvwx");
```

10. Sorted Union

```function uniteUnique(...arr) {

const uniteArray = [].concat(...arr);

let uniteUniqueArray = [];

for (let i = 0; i < uniteArray.length; i++) {
if (uniteUniqueArray.indexOf(uniteArray[i]) == -1) uniteUniqueArray.push(uniteArray[i]);
}

return uniteUniqueArray;
}

uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]);
```

11. Convert HTML Entities

```function convertHTML(str) {

return str
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'")
.replace(/<>/g, "<>");

}

convertHTML("Dolce & Gabbana");
convertHTML("Hamburgers < Pizza < Tacos");
convertHTML("Sixty > twelve");
convertHTML('Stuff in "quotation marks"');
convertHTML("Schindler's List");
convertHTML("<>");
convertHTML("abc");
```

12. Sum All Odd Fibonacci Numbers

```function sumFibs(num) {

let fibo = [1, 1];

const nextNum = fibu => fibo[fibo.length - 1] + fibo[fibo.length - 2];

while (nextNum(fibo) <= num) {
fibo.push(nextNum(fibo));
};

return fibo
.filter(currentNum => currentNum%2 != 0) //odd
.reduce((sum, currentNum) => sum + currentNum, 0);

}

sumFibs(1);
sumFibs(4);
sumFibs(1000)
sumFibs(4000000);
```

13. Sum All Primes

```function sumPrimes(num) {

let primArr = [];

const isPrime = num => { for(let i = 2; i < num; i++)
if(num % i === 0) return false;
return num > 1;
}

for (let i = 0; i <= num; i++) {
if(isPrime(i)) primArr.push(i);
}

return primArr.reduce((sum, currentNum) => sum + currentNum, 0);
}

sumPrimes(10);
sumPrimes(977);
```

14. Smallest Common Multiple

```function smallestCommons(arr) {

let rangeArr = [...arr];

for (let i = Math.min(...arr) + 1; i < Math.max(...arr); i++) {
rangeArr.push(i);
}

rangeArr.sort((a, b) => b-a);

let lar = rangeArr[0];
let scm = lar;
let bool = false;

while(!bool){

bool = true;

for (let i = 0; i < rangeArr.length; i++) {
if (scm % rangeArr[i] != 0) bool = false;
}

if (bool) return scm;

scm += lar;
}

}

smallestCommons([1,5]);
```

15. Drop it

```function dropElements(arr, func) {

let copy = [...arr];

for (let i = 0; i < arr.length; i++) {

if (func(arr[i])) {
break;
}

copy.shift();

}

return copy;
}

dropElements([1, 2, 3], function(n) {return n < 3; });
```

16. Steamroller (Recursion)

```function steamrollArray(arr) {

var flatArr = [];

const flatten = arr => {
for (let i = 0; i < arr.length; i++){
(Array.isArray(arr[i])) ? flatten(arr[i]) : flatArr.push(arr[i]);
}
return flatArr;
}

return flatten(arr);
}

console.log(steamrollArray([1, [2], [3, [[4]]]]));
```

17. Binary Agents

```function binaryAgent(binary) {

return binary.split(' ') //Split string in array of binary chars
.map(bin => String.fromCharCode(parseInt(bin, 2))) //Map every binary char to real char
.join(''); //Join the array back to a string

}

binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111");
```

18. Everything Be True

```function truthCheck(collection, pre) {

return collection.every(col => col.hasOwnProperty(pre) && Boolean(col[pre]));

}

truthCheck([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex");
```

19. Arguments Optionalf (was really tough… this is the sample solution)

```function addTogether(first, second) {
if (typeof first !== "number") {
return undefined;
}
const sum = second =>
typeof second === "number" ? first + second : undefined;
return typeof second === "undefined" ? second => sum(second) : sum(second);
}

```

20. Make a Person

```var Person = function(firstAndLast) {

var _arr = firstAndLast.split(" ");

// getter
this.getFirstName = () => _arr[0];
this.getLastName = () => _arr[1];
this.getFullName = () => _arr.join(" ");

// setter
this.setFirstName = first => _arr[0] = first;
this.setLastName = last => _arr[1] = last;
this.setFullName = firstAndLast => _arr = firstAndLast.split(" ");

};

var bob = new Person('Bob Ross');
bob.getFullName();
```

21. Map the Debris

```function orbitalPeriod(arr) {
var GM = 398600.4418;