Skip to content

Instantly share code, notes, and snippets.

@ukhlivanov
Created April 30, 2018 04:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ukhlivanov/176f4d21228869bc5515e999496bd886 to your computer and use it in GitHub Desktop.
Save ukhlivanov/176f4d21228869bc5515e999496bd886 to your computer and use it in GitHub Desktop.
ThinkFul-Loops
function average(numbers) {
// your code goes here
return numbers.reduce(sum)/numbers.length;
}
function sum(total, num) {
return total + num;
}
/* From here down, you are not expected to
understand.... for now :)
Nothing to see here!
*/
// tests
function testFunctionWorks(fn, input, expected) {
if (fn(input) === expected) {
console.log('SUCCESS: `' + fn.name + '` works on `[' + input + ']`');
return true;
} else {
console.log(
'FAILURE: `' +
fn.name +
'([' +
input +
'])` should be ' +
expected +
' but was ' +
fn(input)
);
return false;
}
}
(function runTests() {
const numList1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const correctAns1 = 5.5;
const numList2 = [0, -1, 1];
const correctAns2 = 0;
const testResults = [
testFunctionWorks(average, numList1, correctAns1),
testFunctionWorks(average, numList2, correctAns2),
];
const numPassing = testResults.filter(function(result) {
return result;
}).length;
console.log(numPassing + ' out of ' + testResults.length + ' tests passing.');
})();
function fizzBuzz(countTo) {
// your code here
const arr=[];
for(let i=1; i<=countTo; i++){
if((i%3 === 0) && (i%5 === 0)){
arr.push("fizzbuzz");
} else if(i%3 === 0){
arr.push("fizz");
}else if(i%5 === 0){
arr.push("buzz");
}else{
arr.push(i);
}
}
return arr;
}
/* From here down, you are not expected to
understand.... for now :)
Nothing to see here!
*/
// tests
(function testFizzBuzz() {
// we'll use the variables in our test cases
const countTo = 16;
const expected = [
1,
2,
'fizz',
4,
'buzz',
'fizz',
7,
8,
'fizz',
'buzz',
11,
'fizz',
13,
14,
'fizzbuzz',
16,
];
const actual = fizzBuzz(countTo) || [];
if (
expected.length === actual.length &&
expected.every(function(item, index) {
return actual[index] === item;
})
) {
console.log('SUCCESS: fizzBuzz is working');
} else {
console.log('FAILURE: fizzBuzz is not working');
}
})();
function max(numbers) {
// your code here
const sortArr = quickSort(numbers);
return sortArr[sortArr.length-1];
}
function min(numbers) {
// your code here
const sortArr = quickSort(numbers);
return sortArr[0];
}
function quickSort(arr){
if(arr.length<=1){
return arr;
}
let arrLength = arr.length;
let pivotPosition = Math.floor(arrLength / 2);
let pivotValue = arr[pivotPosition];
let less=[], more=[], same=[];
for (let i = 0; i < arrLength; i++) {
if (arr[i] === pivotValue) {
same.push(arr[i]);
} else if(arr[i] < pivotValue){
less.push(arr[i]);
} else{
more.push(arr[i]);
}
}
return quickSort(less).concat(same, quickSort(more));
}
/* From here down, you are not expected to
understand.... for now :)
Nothing to see here!
*/
// tests
function testFunctionWorks(fn, input, expected) {
if (fn(input) === expected) {
console.log('SUCCESS: `' + fn.name + '` works on `[' + input + ']`');
return true;
} else {
console.log(
'FAILURE: `' +
fn.name +
'([' +
input +
'])` should be ' +
expected +
' but was ' +
fn(input)
);
return false;
}
}
function testEmpty(fn) {
if (fn([]) === null || fn([]) == undefined) {
console.log(`SUCCESS: ${fn.name} works on empty arrays`);
return true;
} else {
console.log(
`FAILURE: ${fn.name} should return undefined or null for empty arrays`
);
return false;
}
}
(function runTests() {
// we'll use the variables in our test cases
const numList1 = [-5, 28, 98, -20013, 0.7878, 22, 115];
const realMin1 = numList1[3];
const realMax1 = numList1[6];
const numList2 = [0, 1, 2, 3, 4];
const realMin2 = numList2[0];
const realMax2 = numList2[4];
const testResults = [
testFunctionWorks(max, numList1, realMax1),
testFunctionWorks(max, numList2, realMax2),
testFunctionWorks(min, numList1, realMin1),
testFunctionWorks(min, numList2, realMin2),
testEmpty(max),
testEmpty(min),
];
const numPassing = testResults.filter(function(result) {
return result;
}).length;
console.log(numPassing + ' out of ' + testResults.length + ' tests passing.');
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment