going through the eloquent javascript book over the holidays
// Looping a Triangle
let triangle = "";
do {
triangle += "#";
console.log(triangle);
} while (triangle.length < 8);
// Fizzbuzz
for (let i = 1; i <= 100; i++) {
if (i % 5 == 0 && i % 3 == 0) {
console.log("fizzbuzz");
} else if (i % 5 == 0) {
console.log("fizz");
} else if (i % 3 == 0) {
console.log("buzz");
} else {
console.log(i);
}
}
//Chessboard
let size = 8;
let board = "";
for (let j = 0; j < size; j++) {
if (j % 2 == 0) {
for (let i = 0; i < size; i++) {
if (i % 2 == 0) {
board += "#";
} else {
board += " ";
}
}
} else {
for (let i = 0; i < size; i++) {
if (i % 2 == 0) {
board += " ";
} else {
board += "#";
}
}
}
board += "\n"
}
console.log(board);
// Minimum
let minuo = (a, b) => {
if (a < b) {
return a;
} else {
return b;
}
}
console.log(minuo(22, 33));
console.log(Math.min(22, 33));
// Recursion
let isEven = (n) => {
if (n == 0) {
return true;
} else if (n == 1) {
return false;
} else {
return isEven(n - 2);
}
}
console.log(isEven(50));
console.log(isEven(65));
// Bean Counting
let word = "Beanboozled";
let char = 'o'
let countChar = (word, char) => {
let numOfChar = 0;
for (let i = 0; i < word.length; i++) {
if (word[i] == char) {
numOfChar++;
}
}
return numOfChar;
}
console.log(word + " has " + countChar(word, char) + " many \"" + char + "\"s");
// The Sum of a Range
let range = (start, end, step = 1) => {
let rangeOfNum = [];
if (end > start) {
for (let i = start; i <= end; i += step) {
rangeOfNum.push(i);
}
} else {
for (let i = start; i >= end; i += step) {
rangeOfNum.push(i);
}
}
return rangeOfNum;
}
console.log(range(5, 2, -1));
let sum = (summands) => {
let total = 0;
summands.forEach(element => {
total += element;
});
return total;
}
console.log(sum(range(1, 10))); // 55
// Reversing an Array
let reverseArray = (arr) => {
let retArr = [];
for (let i = 0; i < arr.length; i++) {
retArr[i] = arr[arr.length - (1 + i)];
}
return retArr;
}
let example = [12, 24, 48, 96, 192];
console.log(reverseArray(example));
let reverseArrayInPlace = (arr) => {
let revArr = [];
for (let i = 0; i < arr.length; i++) {
revArr.unshift(arr[i]);
}
for (let i = 0; i < revArr.length; i++) {
arr[i] = revArr[i];
}
return arr;
}
console.log(example);
console.log(reverseArrayInPlace(example));
// A List (A list?)
let arr123 = [1, 2, 3];
let arrayToList = (arr) => {
let list = {};
list.value = arr.shift();
if (arr.length > 0) {
list.rest = arrayToList(arr);
} else {
list.rest = null;
}
return list;
}
let list123 = (arrayToList(arr123));
console.log("the resultant list is ");
console.log(list123);
let listToArray = (list) => {
let arr = [];
for (let node = list; node; node = node.rest) {
arr.push(node.value);
}
return arr;
}
console.log("the list turned back into an array is ");
console.log(listToArray(list123));
let prepend = (element, inputList) => {
let list = { element, rest: inputList };
return list;
}
list123 = prepend(6, list123);
console.log("after prepending the list is ");
console.log(list123);
let nth = (list, num) => {
if (!list) {
return undefined;
} else if (num == 0) {
return list.value;
} else {
return nth(list.rest, num - 1);
}
}
console.log(nth(list123, 3));
// Deep Comparison
let deepEqual = (comparer, comparand) => {
if (comparer === comparand) {
return true;
}
if (comparer == null || typeof comparer != "object" || comparand == null || typeof comparand != "object") {
return false;
}
let keysA = Object.keys(comparer), keysB = Object.keys(comparand);
if (keysA.length != keysB.length) {
return false;
}
for (let key of keysA) {
if (!keysB.includes(key) || !deepEqual(comparer[key], comparand[key])) {
return false;
}
}
return true;
}
let scar = { face: "slash" };
let chin = { face: "butt" };
console.log(deepEqual(scar, chin));