From da4fd4942285e574031592314f5de016e9a1f222 Mon Sep 17 00:00:00 2001 From: Bartechnika Date: Sat, 11 Sep 2021 15:49:42 +0100 Subject: [PATCH 1/3] Created new persistence algorithm --- maths/persistence.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 maths/persistence.py diff --git a/maths/persistence.py b/maths/persistence.py new file mode 100644 index 000000000000..693e84f00788 --- /dev/null +++ b/maths/persistence.py @@ -0,0 +1,42 @@ +def persistence(num: int) -> int: + """ + Return the persistence of a given number. + + https://en.wikipedia.org/wiki/Persistence_of_a_number + + >>> persistence(217) + 2 + >>> persistence(-1) + Traceback (most recent call last): + ... + ValueError: persistence() does not accept negative values + >>> persistence("long number") + Traceback (most recent call last): + ... + ValueError: persistence() only accepts integral values + """ + + if not isinstance(num, int): + raise ValueError("persistence() only accepts integral values") + if num < 0: + raise ValueError("persistence() does not accept negative values") + + steps = 0 + num_string = str(num) + + while len(num_string) != 1: + numbers = [int(i) for i in num_string] + + total = 1 + for i in range(0, len(numbers)): + total *= numbers[i] + + num_string = str(total) + + steps += 1 + return steps + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 64ba21d59df0cb951977496f201694f6be9b63ab Mon Sep 17 00:00:00 2001 From: Bartechnika Date: Wed, 15 Sep 2021 16:33:57 +0100 Subject: [PATCH 2/3] Update persistence.py --- maths/persistence.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/maths/persistence.py b/maths/persistence.py index 693e84f00788..e6674aaa8226 100644 --- a/maths/persistence.py +++ b/maths/persistence.py @@ -1,7 +1,7 @@ def persistence(num: int) -> int: """ Return the persistence of a given number. - + https://en.wikipedia.org/wiki/Persistence_of_a_number >>> persistence(217) @@ -20,10 +20,10 @@ def persistence(num: int) -> int: raise ValueError("persistence() only accepts integral values") if num < 0: raise ValueError("persistence() does not accept negative values") - + steps = 0 num_string = str(num) - + while len(num_string) != 1: numbers = [int(i) for i in num_string] @@ -36,7 +36,8 @@ def persistence(num: int) -> int: steps += 1 return steps + if __name__ == "__main__": import doctest - + doctest.testmod() From effeab809d0e8f128fa6fd3294e726a61330494d Mon Sep 17 00:00:00 2001 From: Bartechnika Date: Mon, 8 Nov 2021 17:05:32 +0000 Subject: [PATCH 3/3] Added another persistence function --- maths/persistence.py | 55 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/maths/persistence.py b/maths/persistence.py index e6674aaa8226..607641e67200 100644 --- a/maths/persistence.py +++ b/maths/persistence.py @@ -1,25 +1,25 @@ -def persistence(num: int) -> int: +def multiplicative_persistence(num: int) -> int: """ Return the persistence of a given number. https://en.wikipedia.org/wiki/Persistence_of_a_number - >>> persistence(217) + >>> multiplicative_persistence(217) 2 - >>> persistence(-1) + >>> multiplicative_persistence(-1) Traceback (most recent call last): ... - ValueError: persistence() does not accept negative values - >>> persistence("long number") + ValueError: multiplicative_persistence() does not accept negative values + >>> multiplicative_persistence("long number") Traceback (most recent call last): ... - ValueError: persistence() only accepts integral values + ValueError: multiplicative_persistence() only accepts integral values """ if not isinstance(num, int): - raise ValueError("persistence() only accepts integral values") + raise ValueError("multiplicative_persistence() only accepts integral values") if num < 0: - raise ValueError("persistence() does not accept negative values") + raise ValueError("multiplicative_persistence() does not accept negative values") steps = 0 num_string = str(num) @@ -37,6 +37,45 @@ def persistence(num: int) -> int: return steps +def additive_persistence(num: int) -> int: + """ + Return the persistence of a given number. + + https://en.wikipedia.org/wiki/Persistence_of_a_number + + >>> additive_persistence(199) + 3 + >>> additive_persistence(-1) + Traceback (most recent call last): + ... + ValueError: additive_persistence() does not accept negative values + >>> additive_persistence("long number") + Traceback (most recent call last): + ... + ValueError: additive_persistence() only accepts integral values + """ + + if not isinstance(num, int): + raise ValueError("additive_persistence() only accepts integral values") + if num < 0: + raise ValueError("additive_persistence() does not accept negative values") + + steps = 0 + num_string = str(num) + + while len(num_string) != 1: + numbers = [int(i) for i in num_string] + + total = 0 + for i in range(0, len(numbers)): + total += numbers[i] + + num_string = str(total) + + steps += 1 + return steps + + if __name__ == "__main__": import doctest