diff --git a/10_fibonacci/fibonacci.spec.js b/10_fibonacci/fibonacci.spec.js index 7f62213..de632d8 100644 --- a/10_fibonacci/fibonacci.spec.js +++ b/10_fibonacci/fibonacci.spec.js @@ -16,9 +16,15 @@ describe('fibonacci', () => { test.skip('25th fibonacci number is 75025', () => { expect(fibonacci(25)).toBe(75025); }); + test.skip('0th fibonacci number is 0', () => { + expect(fibonacci(0)).toBe(0); + }); test.skip('doesn\'t accept negatives', () => { expect(fibonacci(-25)).toBe("OOPS"); }); + test.skip('DOES accept strings', () => { + expect(fibonacci("0")).toBe(0); + }); test.skip('DOES accept strings', () => { expect(fibonacci("1")).toBe(1); }); diff --git a/10_fibonacci/solution/fibonacci-solution.js b/10_fibonacci/solution/fibonacci-solution.js index acdd1e0..1327ce9 100644 --- a/10_fibonacci/solution/fibonacci-solution.js +++ b/10_fibonacci/solution/fibonacci-solution.js @@ -1,10 +1,19 @@ -const fibonacci = function(count) { +const fibonacci = function(countArg) { + // checks argument's type and makes sure we use + // a number throughout rest of function. + let count + if (typeof countArg !== 'number') { + count = parseInt(countArg) + } else { + count = countArg + } + if (count < 0) return "OOPS"; - if (count === 0) return 0; + if (count == 0) return 0; let firstPrev = 1; let secondPrev = 0; - + for (let i = 2; i <= count; i++) { let current = firstPrev + secondPrev; secondPrev = firstPrev; @@ -12,6 +21,14 @@ const fibonacci = function(count) { } return firstPrev; + }; +// Another way to do it is by using an iterative approach with an array containing two values, 0 and 1. +// const fib = [0, 1]; +// for (let i = 2; i <= count; i++) { +// fib[i] = fib[i - 1] + fib[i - 2]; +// } +// return fib[count]; + module.exports = fibonacci; diff --git a/10_fibonacci/solution/fibonacci-solution.spec.js b/10_fibonacci/solution/fibonacci-solution.spec.js index 4e6a44d..fdb0bad 100644 --- a/10_fibonacci/solution/fibonacci-solution.spec.js +++ b/10_fibonacci/solution/fibonacci-solution.spec.js @@ -1,4 +1,4 @@ -const fibonacci = require('./fibonacci-solution'); +const fibonacci = require('./fibonacci-solution') describe('fibonacci', () => { test('4th fibonacci number is 3', () => { @@ -16,19 +16,22 @@ describe('fibonacci', () => { test('25th fibonacci number is 75025', () => { expect(fibonacci(25)).toBe(75025); }); - test('0th fibonacci number is o', () => { + test('0th fibonacci number is 0', () => { expect(fibonacci(0)).toBe(0); }); - test("doesn't accept negatives", () => { - expect(fibonacci(-25)).toBe('OOPS'); + test('doesn\'t accept negatives', () => { + expect(fibonacci(-25)).toBe("OOPS"); }); test('DOES accept strings', () => { - expect(fibonacci('1')).toBe(1); + expect(fibonacci("0")).toBe(0); }); test('DOES accept strings', () => { - expect(fibonacci('2')).toBe(1); + expect(fibonacci("1")).toBe(1); }); test('DOES accept strings', () => { - expect(fibonacci('8')).toBe(21); + expect(fibonacci("2")).toBe(1); }); -}); + test('DOES accept strings', () => { + expect(fibonacci("8")).toBe(21); + }); +}); \ No newline at end of file