Skip to content

algorithm: Add juggler sequence #7985

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
57 changes: 57 additions & 0 deletions maths/juggler_sequence.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
"""
== Juggler Sequence ==
Juggler sequence start with any positive integer n. The next term is
obtained as follows:
If n term is even, the next term is floor value of square root of n .
If n is odd, the next term is floor value of 3 time the square root of n.

https://en.wikipedia.org/wiki/Juggler_sequence
"""

# Author : Akshay Dubey (https://github.com/itsAkshayDubey)
import math


def juggler_sequence(number: int) -> list[int]:
"""
>>> juggler_sequence(0)
Traceback (most recent call last):
...
ValueError: Input value of [number=0] must be a positive integer
>>> juggler_sequence(1)
[1]
>>> juggler_sequence(2)
[2, 1]
>>> juggler_sequence(3)
[3, 5, 11, 36, 6, 2, 1]
>>> juggler_sequence(5)
[5, 11, 36, 6, 2, 1]
>>> juggler_sequence(6.0)
Traceback (most recent call last):
...
TypeError: Input value of [number=6.0] must be an integer
>>> juggler_sequence(-1)
Traceback (most recent call last):
...
ValueError: Input value of [number=-1] must be a positive integer
"""
if not isinstance(number, int):
raise TypeError(f"Input value of [number={number}] must be an integer")
if number < 1:
raise ValueError(f"Input value of [number={number}] must be a positive integer")
sequence = [number]
while number != 1:
if number % 2 == 0:
number = int(math.floor(math.sqrt(number)))
else:
number = int(
math.floor(math.sqrt(number) * math.sqrt(number) * math.sqrt(number))
)
sequence.append(number)
return sequence


if __name__ == "__main__":
import doctest

doctest.testmod()