From 7b18992a6d6987d8816bc3445a1e64a96c6dbc17 Mon Sep 17 00:00:00 2001 From: MohdFaisalBidda Date: Mon, 16 Oct 2023 00:41:01 +0530 Subject: [PATCH 1/5] Feat: Fibonacci Series --- maths/series/fibonacci_numbers.ts | 26 +++++++++++++++++++++ maths/series/test/fibonacci_numbers.test.ts | 15 ++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 maths/series/fibonacci_numbers.ts create mode 100644 maths/series/test/fibonacci_numbers.test.ts diff --git a/maths/series/fibonacci_numbers.ts b/maths/series/fibonacci_numbers.ts new file mode 100644 index 00000000..23e745cd --- /dev/null +++ b/maths/series/fibonacci_numbers.ts @@ -0,0 +1,26 @@ +/** + * @function FibonacciNumbers + * @description To generate the requested number of fibonacci numbers + * @summary the Fibonacci sequence is a sequence in which each number is the sum of the two preceding ones. + * @see [Wikipedia](https://en.wikipedia.org/wiki/Fibonacci_sequence) + * @author MohdFaisalBidda + * @param {number} n - The number of fibonacci numbers to generate + * @returns {number[]} - An array containing first 'n' fibonacci numbers + * @example fibonacciNumbers(7) = [ 0, 1, 1, 2, 3, 5, 8 ] + * @example fibonacciNumbers(15) = [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 ] + */ +export const FibonacciNumbers = (n: number): number[] => { + if (isNaN(n)) throw new Error('The input needs to be a number') + if (!Number.isInteger(n) || n < 0) throw new Error('The input needs to be a non-negative integer') + if (n <= 0) return []; + if (n === 1) return [0]; + + const fibonacciNumbers: number[] = [0, 1]; + + while (fibonacciNumbers.length < n) { + const next = fibonacciNumbers[fibonacciNumbers.length - 1] + fibonacciNumbers[fibonacciNumbers.length - 2]; + fibonacciNumbers.push(next); + } + + return fibonacciNumbers; +} \ No newline at end of file diff --git a/maths/series/test/fibonacci_numbers.test.ts b/maths/series/test/fibonacci_numbers.test.ts new file mode 100644 index 00000000..76d2174b --- /dev/null +++ b/maths/series/test/fibonacci_numbers.test.ts @@ -0,0 +1,15 @@ +import { FibonacciNumbers } from "../fibonacci_numbers"; + +describe("FibonacciNumbers", () => { + it("should return the first 10 fibonacci numbers", () => { + expect(FibonacciNumbers(10)).toStrictEqual([0, 1, 1, 2, 3, 5, 8, 13, 21, 34]); + }) + + it("should return the first 5 fibonacci numbers", () => { + expect(FibonacciNumbers(5)).toStrictEqual([0, 1, 1, 2, 3]) + }) + + it("should return zero fibonacci numbers", () => { + expect(FibonacciNumbers(0)).toStrictEqual([]) + }) +}) From 93ebb69e6619ae031087e89afa9b31b9e92a8357 Mon Sep 17 00:00:00 2001 From: autoprettier Date: Sun, 15 Oct 2023 19:11:20 +0000 Subject: [PATCH 2/5] Update DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 3f34cc78..b495d2e7 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -35,8 +35,10 @@ * [Pronic Number](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/pronic_number.ts) * [Radians To Degrees](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/radians_to_degrees.ts) * Series + * [Fibonacci Numbers](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/fibonacci_numbers.ts) * [Hexagonal Numbers](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/hexagonal_numbers.ts) * Test + * [Fibonacci Numbers.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/test/fibonacci_numbers.test.ts) * [Hexagonal Numbers.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/test/hexagonal_numbers.test.ts) * [Sieve Of Eratosthenes](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/sieve_of_eratosthenes.ts) * [Signum](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/signum.ts) From 74f472d2c345be451c76dad55ef068d4a81ee79d Mon Sep 17 00:00:00 2001 From: MohdFaisalBidda Date: Sat, 21 Oct 2023 16:19:25 +0530 Subject: [PATCH 3/5] feat: generator for fibonacci function --- maths/fibonacci.ts | 32 ++++++++++++++------- maths/series/fibonacci_numbers.ts | 26 ----------------- maths/series/test/fibonacci_numbers.test.ts | 15 ---------- 3 files changed, 21 insertions(+), 52 deletions(-) delete mode 100644 maths/series/fibonacci_numbers.ts delete mode 100644 maths/series/test/fibonacci_numbers.test.ts diff --git a/maths/fibonacci.ts b/maths/fibonacci.ts index b924c91a..3699010a 100644 --- a/maths/fibonacci.ts +++ b/maths/fibonacci.ts @@ -6,20 +6,30 @@ * @see https://en.m.wikipedia.org/wiki/Fibonacci_number * @author MohdFaisalBidda */ +function* generateFibonacci(): Generator { + let a = 0; + let b = 1; + while (true) { + yield a; + const c = a + b; + a = b; + b = c; + } +} export const nthFibonacci = (number: number): number => { - if (number < 0) throw "Number should be greater than 0"; - - if (number === 0) return 0; - - let a = 0, b = 1; + if (isNaN(number)) throw new Error('The input needs to be a number'); + if (!Number.isInteger(number) || number < 0) throw new Error('The input needs to be a non-negative integer'); - for (let i = 1; i < number; ++i) { - const c = a + b; + if (number === 0) { + return 0; + } - a = b; - b = c; + const fibonacciGenerator = generateFibonacci(); + let result = 0; + for (let i = 0; i <= number; ++i) { + result = fibonacciGenerator.next().value; } - return b; -}; + return result; +}; \ No newline at end of file diff --git a/maths/series/fibonacci_numbers.ts b/maths/series/fibonacci_numbers.ts deleted file mode 100644 index 23e745cd..00000000 --- a/maths/series/fibonacci_numbers.ts +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @function FibonacciNumbers - * @description To generate the requested number of fibonacci numbers - * @summary the Fibonacci sequence is a sequence in which each number is the sum of the two preceding ones. - * @see [Wikipedia](https://en.wikipedia.org/wiki/Fibonacci_sequence) - * @author MohdFaisalBidda - * @param {number} n - The number of fibonacci numbers to generate - * @returns {number[]} - An array containing first 'n' fibonacci numbers - * @example fibonacciNumbers(7) = [ 0, 1, 1, 2, 3, 5, 8 ] - * @example fibonacciNumbers(15) = [ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 ] - */ -export const FibonacciNumbers = (n: number): number[] => { - if (isNaN(n)) throw new Error('The input needs to be a number') - if (!Number.isInteger(n) || n < 0) throw new Error('The input needs to be a non-negative integer') - if (n <= 0) return []; - if (n === 1) return [0]; - - const fibonacciNumbers: number[] = [0, 1]; - - while (fibonacciNumbers.length < n) { - const next = fibonacciNumbers[fibonacciNumbers.length - 1] + fibonacciNumbers[fibonacciNumbers.length - 2]; - fibonacciNumbers.push(next); - } - - return fibonacciNumbers; -} \ No newline at end of file diff --git a/maths/series/test/fibonacci_numbers.test.ts b/maths/series/test/fibonacci_numbers.test.ts deleted file mode 100644 index 76d2174b..00000000 --- a/maths/series/test/fibonacci_numbers.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { FibonacciNumbers } from "../fibonacci_numbers"; - -describe("FibonacciNumbers", () => { - it("should return the first 10 fibonacci numbers", () => { - expect(FibonacciNumbers(10)).toStrictEqual([0, 1, 1, 2, 3, 5, 8, 13, 21, 34]); - }) - - it("should return the first 5 fibonacci numbers", () => { - expect(FibonacciNumbers(5)).toStrictEqual([0, 1, 1, 2, 3]) - }) - - it("should return zero fibonacci numbers", () => { - expect(FibonacciNumbers(0)).toStrictEqual([]) - }) -}) From 9c35b9ce149af7be9a80df49f6692d80c882056a Mon Sep 17 00:00:00 2001 From: autoprettier Date: Sat, 21 Oct 2023 10:49:41 +0000 Subject: [PATCH 4/5] Update DIRECTORY.md --- DIRECTORY.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index b495d2e7..3f34cc78 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -35,10 +35,8 @@ * [Pronic Number](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/pronic_number.ts) * [Radians To Degrees](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/radians_to_degrees.ts) * Series - * [Fibonacci Numbers](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/fibonacci_numbers.ts) * [Hexagonal Numbers](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/hexagonal_numbers.ts) * Test - * [Fibonacci Numbers.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/test/fibonacci_numbers.test.ts) * [Hexagonal Numbers.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/series/test/hexagonal_numbers.test.ts) * [Sieve Of Eratosthenes](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/sieve_of_eratosthenes.ts) * [Signum](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/signum.ts) From 1e11632ce0f12efa75ff5c8761d30fd163cd9b69 Mon Sep 17 00:00:00 2001 From: autoprettier Date: Sat, 21 Oct 2023 10:53:09 +0000 Subject: [PATCH 5/5] Update DIRECTORY.md --- DIRECTORY.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index d36d53b5..17182e46 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -7,11 +7,15 @@ * [Generateparentheses.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/backtracking/test/generateparentheses.test.ts) ## Bit Manipulation + * [Add Binary](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/bit_manipulation/add_binary.ts) * [Is Power Of 2](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/bit_manipulation/is_power_of_2.ts) * [Is Power Of 4](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/bit_manipulation/is_power_of_4.ts) + * [Log Two](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/bit_manipulation/log_two.ts) * Test + * [Add Binary.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/bit_manipulation/test/add_binary.test.ts) * [Is Power Of 2.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/bit_manipulation/test/is_power_of_2.test.ts) * [Is Power Of 4.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/bit_manipulation/test/is_power_of_4.test.ts) + * [Log Two.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/bit_manipulation/test/log_two.test.ts) ## Ciphers * [Xor Cipher](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/ciphers/xor_cipher.ts) @@ -71,9 +75,11 @@ ## Dynamic Programming * [Knapsack](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/dynamic_programming/knapsack.ts) + * [Lcs](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/dynamic_programming/lcs.ts) ## Graph * [Bellman Ford](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/bellman_ford.ts) + * [Bipartite Graph](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/bipartite_graph.ts) * [Dijkstra](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/dijkstra.ts) * [Floyd Warshall](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/floyd_warshall.ts) * [Johnson](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/johnson.ts) @@ -81,6 +87,7 @@ * [Prim](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/prim.ts) * Test * [Bellman Ford.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/test/bellman_ford.test.ts) + * [Bipartite Graph.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/test/bipartite_graph.test.ts) * [Dijkstra.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/test/dijkstra.test.ts) * [Floyd Warshall.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/test/floyd_warshall.test.ts) * [Johnson.Test](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/graph/test/johnson.test.ts) @@ -101,6 +108,7 @@ * [Factors](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/factors.ts) * [Fibonacci](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/fibonacci.ts) * [Find Min](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/find_min.ts) + * [Gaussian Elimination](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/gaussian_elimination.ts) * [Greatest Common Factor](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/greatest_common_factor.ts) * [Hamming Distance](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/hamming_distance.ts) * [Is Divisible](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/maths/is_divisible.ts) @@ -151,9 +159,11 @@ * [Counting Sort](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/counting_sort.ts) * [Cycle Sort](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/cycle_sort.ts) * [Gnome Sort](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/gnome_sort.ts) + * [Heap Sort](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/heap_sort.ts) * [Insertion Sort](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/insertion_sort.ts) * [Merge Sort](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/merge_sort.ts) * [Quick Select](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/quick_select.ts) * [Quick Sort](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/quick_sort.ts) * [Selection Sort](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/selection_sort.ts) * [Shell Sort](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/shell_sort.ts) + * [Swap Sort](https://github.com/TheAlgorithms/TypeScript/blob/HEAD/sorts/swap_sort.ts)