Created
June 20, 2022 15:19
-
-
Save BenDMyers/c6b8a811380f3485b7cc2d7c18e52e62 to your computer and use it in GitHub Desktop.
RWC: Previous Fibonacci Number
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
/** | |
* Gets the previous number in the Fibonacci sequence, or -1 if this number isn't in the sequence | |
* @param {number} num | |
* @returns {number} previous Fibonacci number (or -1) | |
*/ | |
function getPreviousFibonacciNumber(num) { | |
// Handle negatives | |
if (num <= 0) { | |
return -1; | |
} | |
// 1 is an odd case, because it appears twice, so solution could be either 0 or 1 | |
if (num === 1) { | |
return 0; | |
} | |
const mostRecentNumbersInSequence = [1, 1]; | |
let sum = add(mostRecentNumbersInSequence); | |
while (sum <= num) { | |
mostRecentNumbersInSequence.push(sum); // Add sum to sequence | |
mostRecentNumbersInSequence.shift(); // Demote n[k-2] from sequence | |
sum = add(mostRecentNumbersInSequence); | |
} | |
if (mostRecentNumbersInSequence[1] === num) { | |
return mostRecentNumbersInSequence[0]; | |
} else { | |
return -1; | |
} | |
} | |
/** | |
* Sums up an array | |
* @param {number[]} nums array of numbers | |
* @returns {number} sum of all numbers in array | |
*/ | |
function add(nums) { | |
const sum = nums.reduce((total, addend) => total + addend, 0); | |
return sum; | |
} | |
console.log( | |
getPreviousFibonacciNumber(-30), | |
getPreviousFibonacciNumber(1), | |
getPreviousFibonacciNumber(13), | |
getPreviousFibonacciNumber(144), | |
getPreviousFibonacciNumber(2584), | |
getPreviousFibonacciNumber(2589), | |
); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment