Last active
October 20, 2020 21:36
-
-
Save ross-u/0395dbc4d52c720cd17df94ff23a0797 to your computer and use it in GitHub Desktop.
LAB solution - M1 | Functions and Arrays - WDFT EN 10/2020
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
// Iteration #1: Find the maximum | |
const maxOfTwoNumbers = (a, b) => { | |
if(a > b) return a; | |
else if (b > a) return b; | |
else return a | |
}; | |
// Iteration #2: Find longest word | |
const words = ['mystery', 'brother', 'aviator', 'crocodile', 'pearl', 'orchard', 'crackpot']; | |
function findLongestWord(arrOfWords) { | |
if (!arrOfWords.length) return null; | |
//to start we take the first word as the longest one | |
let largestWord = arrOfWords[0]; | |
// use for loop to go through the arrOfWords | |
// word is just a placeholder | |
// | | |
for (let word of arrOfWords) { | |
// if the current word is longer than the largestWord... | |
if (word.length > largestWord.length) { | |
// ... then that word becomes the new largestWord | |
largestWord = word; | |
} | |
} | |
return largestWord; | |
} | |
// Iteration #3: Calculate the sum | |
const numbers = [6, 12, 1, 18, 13, 16, 2, 1, 8, 10]; | |
function sumNumbers(numbersArr) { | |
if (!numbersArr) return null; | |
let sum = 0; | |
numbersArr.forEach( function (num) { | |
sum += num; | |
}) | |
// for (let el of numbersArr) { | |
// // we are adding "typeof" condition to reuse this function | |
// // to calculate sum of letters in the array of words | |
// // we can check the type of elements in the array: | |
// // console.log(`Type of el: ${typeof el}`); | |
// if (typeof el === 'string') sum += el.length; | |
// else sum += el; | |
// } | |
return sum; | |
} | |
// Iteration #3.1: Bonus | |
function sum(numbersArr) { | |
if (!numbersArr) return null; | |
let sum = 0; | |
console.log('numbersArr', numbersArr) | |
numbersArr.forEach( function (el) { | |
if (typeof el === 'string') { | |
sum += el.length; | |
} | |
else if (typeof el === 'object') { | |
throw new Error("Unsupported data type sir or ma'am") | |
} | |
else { | |
sum += el | |
}; | |
}) | |
return sum; | |
} | |
// Iteration #4: Calculate the average | |
// Level 1: Array of numbers | |
const numbersAvg = [2, 6, 9, 10, 7, 4, 1, 9]; | |
function averageNumbers(arr) { | |
var average = 0; | |
var result = 0; | |
if (arr.length === 0) { | |
return null; | |
} | |
if (arr.length === 1) { | |
return arr[0]; | |
} | |
for (var i = 0; i < arr.length; i++) { | |
result += arr[i]; | |
} | |
average = result / arr.length; | |
return average; | |
} | |
// Level 2: Array of strings | |
const wordsArr = ['seat', 'correspond', 'linen', 'motif', 'hole', 'smell', 'smart', 'chaos', 'fuel', 'palace']; | |
function averageWordLength(words) { | |
if (!words.length) return null; | |
let wordLengths = []; | |
for (let word of words) { | |
wordLengths.push(word.length); | |
} | |
return averageNumbers(wordLengths); | |
}; | |
// the other way doing the same as above: | |
// const averageWordLength = words => { | |
// if (!words.length) return null; | |
// return words.join('').length / words.length; | |
// }; | |
averageNumbers(wordsArr) | |
// Bonus - Iteration #4.1: A generic avg() | |
function avg(arr) { | |
if (!arr.length) return null; | |
else { | |
var total = sum(arr) / arr.length; | |
var totalFixed = Number(total.toFixed(2)); | |
return totalFixed; | |
}; | |
} | |
// Iteration #5: Unique arrays | |
const wordsUnique = [ | |
'crab', | |
'poison', | |
'contagious', | |
'simple', | |
'bring', | |
'sharp', | |
'playground', | |
'poison', | |
'communion', | |
'simple', | |
'bring' | |
]; | |
const uniquifyArray = words => { | |
if (!words.length) return null; | |
let uniqueArr = []; | |
words.forEach(function (word) { | |
if (!uniqueArr.includes(word)) { | |
uniqueArr.push(word) | |
}; | |
}) | |
return uniqueArr; | |
}; | |
// Second option - using Sets | |
// function uniquifyArray (words) { | |
// var uniqueSet = new Set(words); // Create a set out of the array. Set is a list of unique values, only one of each value will be created in the Set. | |
// var arr = [ ...uniqueSet ]; // Convert the Set to an array by spreading it (copying). | |
// return arr; | |
// }; | |
// Iteration #6: Find elements | |
const wordsFind = ['machine', 'subset', 'trouble', 'starting', 'matter', 'eating', 'truth', 'disobedience']; | |
function doesWordExist(arr, word) { | |
if (!arr.length) return null; | |
return arr.includes(word); | |
} | |
// Iteration #7: Count repetition | |
const wordsCount = [ | |
'machine', | |
'matter', | |
'subset', | |
'trouble', | |
'starting', | |
'matter', | |
'eating', | |
'matter', | |
'truth', | |
'disobedience', | |
'matter' | |
]; | |
function howManyTimes(arr, word) { | |
let count = 0; | |
for (let el of arr) { | |
if (el === word) count++; | |
} | |
return count; | |
} | |
// Iteration #8: Bonus | |
const matrix = [ | |
[8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8], | |
[49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0], | |
[81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65], | |
[52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91], | |
[22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80], | |
[24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50], | |
[32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70], | |
[67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21], | |
[24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72], | |
[21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95], | |
[78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92], | |
[16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57], | |
[86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58], | |
[19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40], | |
[4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66], | |
[88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69], | |
[4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36], | |
[20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16], | |
[20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54], | |
[1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48] | |
]; | |
const greatestProduct = matrix => { | |
let product = 0; | |
const numberOfRows = matrix.length; | |
const numberOfColumns = matrix[0].length; | |
// console.log(numberOfRows); | |
// console.log(numberOfColumns) | |
for (let i = 0; i < numberOfRows; i++) { | |
let row = matrix[i]; | |
for (let e = 0; e < numberOfColumns - 3; e++) { | |
// 0 - 1 - 2 - 3 | |
// 1 - 2 - 3 - 4 | |
let rowProduct = row[e] * row[e + 1] * row[e + 2] * row[e + 3]; | |
if (rowProduct > product) { | |
product = rowProduct; | |
} | |
} | |
} | |
for (let i = 0; i < numberOfColumns; i++) { | |
for (let e = 0; e < numberOfRows - 3; e++) { | |
let columnProduct = | |
matrix[e][i] * matrix[e + 1][i] * matrix[e + 2][i] * matrix[e + 3][i]; | |
if (columnProduct > product) { | |
product = columnProduct; | |
} | |
} | |
} | |
return product; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment