diff --git a/docs/hackerrank/projecteuler/euler002.md b/docs/hackerrank/projecteuler/euler002.md new file mode 100644 index 00000000..27c7fb0c --- /dev/null +++ b/docs/hackerrank/projecteuler/euler002.md @@ -0,0 +1,47 @@ +# [Even Fibonacci numbers](https://www.hackerrank.com/contests/projecteuler/challenges/euler002) + +- Difficulty: #easy +- Category: #ProjectEuler+ + +Each new term in the Fibonacci sequence is generated by adding the previous two terms. +By starting with $ 1 $ and $ 2 $, the first $ 10 $ terms will be: + +$$ 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 $$ + +By considering the terms in the Fibonacci sequence whose values do not exceed +$ N $, find the sum of the even-valued terms. + +## Input Format + +First line contains $ T $ that denotes the number of test cases. This is +followed by $ T $ lines, each containing an integer, $ N $. + +## Constraints + +- $ 1 \leq T \leq 10^5 $ +- $ 10 \leq N \leq 4 × 10^{16} $ + +## Output Format + +Print the required answer for each test case. + +## Sample Input 0 + +```text +2 +10 +100 +``` + +## Sample Output 0 + +```text +10 +44 +``` + +## Explanation 0 + +- For $ N = 10 $, we have $ \{2, 8\} $, sum is $ 10 $. + +- For $ N = 100 $, we have $ \{2, 8, 34 \} $, sum is $ 44 $. diff --git a/src/hackerrank/projecteuler/euler002.test.ts b/src/hackerrank/projecteuler/euler002.test.ts new file mode 100755 index 00000000..aca78a04 --- /dev/null +++ b/src/hackerrank/projecteuler/euler002.test.ts @@ -0,0 +1,21 @@ +import { describe, expect, it } from '@jest/globals'; +import { logger as console } from '../../logger'; + +import { euler002 } from './euler002'; + +describe('euler002', () => { + it('euler002 Test case 0', () => { + expect.assertions(2); + + const tests = [ + { n: 10, answer: 10 }, + { n: 100, answer: 44 } + ]; + + tests.forEach((test) => { + const calculated = euler002(test.n); + console.log(`euler002(${test.n}) solution found: ${test.answer}`); + expect(calculated).toStrictEqual(test.answer); + }); + }); +}); diff --git a/src/hackerrank/projecteuler/euler002.ts b/src/hackerrank/projecteuler/euler002.ts new file mode 100644 index 00000000..21bfe957 --- /dev/null +++ b/src/hackerrank/projecteuler/euler002.ts @@ -0,0 +1,27 @@ +/** + * @link Problem definition [[docs/hackerrank/projecteuler/euler001.md]] + */ + +export function fibo_even_sum(n: number): number { + let total = 0; + let fibo = 0; + let fibo1 = 1; + let fibo2 = 1; + + while (fibo1 + fibo2 < n) { + fibo = fibo1 + fibo2; + fibo1 = fibo2; + fibo2 = fibo; + + if (fibo % 2 == 0) { + total += fibo; + } + } + + return total; +} + +// Function to find the sum of all multiples of a and b below n +export function euler002(n: number): number { + return fibo_even_sum(n); +}