Skip to content

Commit 7bbec43

Browse files
committed
feat: juggler sequence
1 parent 6958645 commit 7bbec43

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

maths/juggler_sequence.ts

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* The juggler sequence is a integer sequence that starts with an positive integer a and the subsequent terms are
3+
* described as following:
4+
* if a_k is even:
5+
* a_k+1 = floor(sqrt(a_k))
6+
* else:
7+
* a_k+1 = floor(sqrt(a_k^3))
8+
*
9+
* Time Complexity: linear (O(n))
10+
*
11+
* @param a The number to start with
12+
* @param n The index of the searched number in the sequence.
13+
* @returns The number at index n in the sequence.
14+
* @see https://en.wikipedia.org/wiki/Juggler_sequence
15+
*/
16+
export const jugglerSequence = (a: number, n: number) => {
17+
let k: number = a;
18+
for (let i: number = 0; i < n; i++) {
19+
if (k % 2 === 0) {
20+
k = Math.floor(Math.pow(k, 1 / 2));
21+
} else {
22+
k = Math.floor(Math.pow(k, 3 / 2));
23+
}
24+
}
25+
26+
return k;
27+
};

maths/test/juggler_sequence.test.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { jugglerSequence } from '../juggler_sequence';
2+
3+
describe('jugglerSequence', () => {
4+
it.each([
5+
[3, 3, 36],
6+
[3, 5, 2],
7+
[7, 3, 2],
8+
[5, 1, 11],
9+
])('%i at index %i should equal %i', (a, n, k) => {
10+
expect(jugglerSequence(a, n)).toBe(k);
11+
});
12+
});

0 commit comments

Comments
 (0)