From 3ffc115d2e9080a3cf72362cc4258776500659e8 Mon Sep 17 00:00:00 2001 From: Okza Pradhana Date: Mon, 3 Oct 2022 17:57:58 +0800 Subject: [PATCH 1/7] feat(maths): add function to perform calculation - Add single function to calculate sum of two positive numbers using bitwise operator --- maths/sum_of_two_positive_numbers_bitwise.py | 56 ++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 maths/sum_of_two_positive_numbers_bitwise.py diff --git a/maths/sum_of_two_positive_numbers_bitwise.py b/maths/sum_of_two_positive_numbers_bitwise.py new file mode 100644 index 000000000000..21e76ffba8b0 --- /dev/null +++ b/maths/sum_of_two_positive_numbers_bitwise.py @@ -0,0 +1,56 @@ +""" +Calculates the sum of two positive numbers using bitwise operator +""" + +def sum_of_two_positive_numbers_bitwise( + number: int, other_number: int +) -> int: + """ " + >>> sum_of_two_positive_numbers_bitwise(4, 5) + 9 + >>> sum_of_two_positive_numbers_bitwise(8, 9) + 17 + >>> sum_of_two_positive_numbers_bitwise(0, 4) + 4 + >>> sum_of_two_positive_numbers_bitwise(4.5, 9) + Traceback (most recent call last): + ... + TypeError: Both parameters MUST be in integer type! + >>> sum_of_two_positive_numbers_bitwise('4', 9) + Traceback (most recent call last): + ... + TypeError: Both parameters MUST be in integer type! + >>> sum_of_two_positive_numbers_bitwise('4.5', 9) + Traceback (most recent call last): + ... + TypeError: Both parameters MUST be in integer type! + >>> sum_of_two_positive_numbers_bitwise(-1, 9) + Traceback (most recent call last): + ... + ValueError: Both parameters MUST be in positive value! + >>> sum_of_two_positive_numbers_bitwise(1, -9) + Traceback (most recent call last): + ... + ValueError: Both parameters MUST be in positive value! + """ + + if isinstance(number, int) is False or isinstance(other_number, int) is False: + raise TypeError('Both parameters MUST be in integer type!') + + if number < 0 or other_number < 0: + raise ValueError('Both parameters MUST be in positive value!') + + # Base case + sum = number ^ other_number + carry = number & other_number + + if (carry) == 0: + return sum + + # Recursive case + return sum_of_two_positive_numbers_bitwise(sum, carry << 1) + +if __name__ == '__main__': + import doctest + + doctest.testmod() \ No newline at end of file From 82ffd3563b1a4111155c081620ed3b231bfa2b45 Mon Sep 17 00:00:00 2001 From: Okza Pradhana Date: Mon, 3 Oct 2022 18:04:06 +0800 Subject: [PATCH 2/7] docs: add wikipedia url as explanation --- maths/sum_of_two_positive_numbers_bitwise.py | 1 + 1 file changed, 1 insertion(+) diff --git a/maths/sum_of_two_positive_numbers_bitwise.py b/maths/sum_of_two_positive_numbers_bitwise.py index 21e76ffba8b0..bbe992517110 100644 --- a/maths/sum_of_two_positive_numbers_bitwise.py +++ b/maths/sum_of_two_positive_numbers_bitwise.py @@ -1,5 +1,6 @@ """ Calculates the sum of two positive numbers using bitwise operator +Wikipedia explanation: https://en.wikipedia.org/wiki/Binary_number """ def sum_of_two_positive_numbers_bitwise( From cf5d31eb16c60303d645cf9780a6477a1797eff3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 10:07:56 +0000 Subject: [PATCH 3/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/sum_of_two_positive_numbers_bitwise.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/maths/sum_of_two_positive_numbers_bitwise.py b/maths/sum_of_two_positive_numbers_bitwise.py index bbe992517110..e8f1f57eec37 100644 --- a/maths/sum_of_two_positive_numbers_bitwise.py +++ b/maths/sum_of_two_positive_numbers_bitwise.py @@ -3,9 +3,8 @@ Wikipedia explanation: https://en.wikipedia.org/wiki/Binary_number """ -def sum_of_two_positive_numbers_bitwise( - number: int, other_number: int -) -> int: + +def sum_of_two_positive_numbers_bitwise(number: int, other_number: int) -> int: """ " >>> sum_of_two_positive_numbers_bitwise(4, 5) 9 @@ -36,10 +35,10 @@ def sum_of_two_positive_numbers_bitwise( """ if isinstance(number, int) is False or isinstance(other_number, int) is False: - raise TypeError('Both parameters MUST be in integer type!') + raise TypeError("Both parameters MUST be in integer type!") if number < 0 or other_number < 0: - raise ValueError('Both parameters MUST be in positive value!') + raise ValueError("Both parameters MUST be in positive value!") # Base case sum = number ^ other_number @@ -51,7 +50,8 @@ def sum_of_two_positive_numbers_bitwise( # Recursive case return sum_of_two_positive_numbers_bitwise(sum, carry << 1) -if __name__ == '__main__': + +if __name__ == "__main__": import doctest - doctest.testmod() \ No newline at end of file + doctest.testmod() From 73e32c1d5b120342938bda22649925bf6e4b2c7e Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Wed, 27 Sep 2023 01:48:20 -0400 Subject: [PATCH 4/7] Apply suggestions from code review Co-authored-by: Caeden Perelli-Harris --- maths/sum_of_two_positive_numbers_bitwise.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/maths/sum_of_two_positive_numbers_bitwise.py b/maths/sum_of_two_positive_numbers_bitwise.py index e8f1f57eec37..f46eeb8fd90f 100644 --- a/maths/sum_of_two_positive_numbers_bitwise.py +++ b/maths/sum_of_two_positive_numbers_bitwise.py @@ -34,17 +34,17 @@ def sum_of_two_positive_numbers_bitwise(number: int, other_number: int) -> int: ValueError: Both parameters MUST be in positive value! """ - if isinstance(number, int) is False or isinstance(other_number, int) is False: - raise TypeError("Both parameters MUST be in integer type!") + if not isinstance(number, int) or not isinstance(other_number, int): + raise TypeError("Both arguments MUST be integers!") if number < 0 or other_number < 0: - raise ValueError("Both parameters MUST be in positive value!") + raise ValueError("Both arguments MUST be non-negative!") # Base case sum = number ^ other_number carry = number & other_number - if (carry) == 0: + if carry == 0: return sum # Recursive case From 3e73174ead93b520a6d4c14f8b47a9fa7cb60642 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Wed, 27 Sep 2023 01:51:35 -0400 Subject: [PATCH 5/7] Update sum_of_two_positive_numbers_bitwise.py --- maths/sum_of_two_positive_numbers_bitwise.py | 38 ++++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/maths/sum_of_two_positive_numbers_bitwise.py b/maths/sum_of_two_positive_numbers_bitwise.py index f46eeb8fd90f..300012fd622d 100644 --- a/maths/sum_of_two_positive_numbers_bitwise.py +++ b/maths/sum_of_two_positive_numbers_bitwise.py @@ -1,37 +1,37 @@ """ -Calculates the sum of two positive numbers using bitwise operator +Calculates the sum of two non-negative integers using bitwise operators Wikipedia explanation: https://en.wikipedia.org/wiki/Binary_number """ -def sum_of_two_positive_numbers_bitwise(number: int, other_number: int) -> int: - """ " - >>> sum_of_two_positive_numbers_bitwise(4, 5) +def bitwise_addition_recursive(number: int, other_number: int) -> int: + """ + >>> bitwise_addition_recursive(4, 5) 9 - >>> sum_of_two_positive_numbers_bitwise(8, 9) + >>> bitwise_addition_recursive(8, 9) 17 - >>> sum_of_two_positive_numbers_bitwise(0, 4) + >>> bitwise_addition_recursive(0, 4) 4 - >>> sum_of_two_positive_numbers_bitwise(4.5, 9) + >>> bitwise_addition_recursive(4.5, 9) Traceback (most recent call last): ... - TypeError: Both parameters MUST be in integer type! - >>> sum_of_two_positive_numbers_bitwise('4', 9) + TypeError: Both arguments MUST be integers! + >>> bitwise_addition_recursive('4', 9) Traceback (most recent call last): ... - TypeError: Both parameters MUST be in integer type! - >>> sum_of_two_positive_numbers_bitwise('4.5', 9) + TypeError: Both arguments MUST be integers! + >>> bitwise_addition_recursive('4.5', 9) Traceback (most recent call last): ... - TypeError: Both parameters MUST be in integer type! - >>> sum_of_two_positive_numbers_bitwise(-1, 9) + TypeError: Both arguments MUST be integers! + >>> bitwise_addition_recursive(-1, 9) Traceback (most recent call last): ... - ValueError: Both parameters MUST be in positive value! - >>> sum_of_two_positive_numbers_bitwise(1, -9) + ValueError: Both arguments MUST be non-negative! + >>> bitwise_addition_recursive(1, -9) Traceback (most recent call last): ... - ValueError: Both parameters MUST be in positive value! + ValueError: Both arguments MUST be non-negative! """ if not isinstance(number, int) or not isinstance(other_number, int): @@ -40,14 +40,12 @@ def sum_of_two_positive_numbers_bitwise(number: int, other_number: int) -> int: if number < 0 or other_number < 0: raise ValueError("Both arguments MUST be non-negative!") - # Base case - sum = number ^ other_number + bitwise_sum = number ^ other_number carry = number & other_number if carry == 0: - return sum + return bitwise_sum - # Recursive case return sum_of_two_positive_numbers_bitwise(sum, carry << 1) From aa64f29b8d10553e57739cdd5233a79f2686555b Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Wed, 27 Sep 2023 01:52:46 -0400 Subject: [PATCH 6/7] Update sum_of_two_positive_numbers_bitwise.py --- maths/sum_of_two_positive_numbers_bitwise.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/sum_of_two_positive_numbers_bitwise.py b/maths/sum_of_two_positive_numbers_bitwise.py index 300012fd622d..3852907bb020 100644 --- a/maths/sum_of_two_positive_numbers_bitwise.py +++ b/maths/sum_of_two_positive_numbers_bitwise.py @@ -46,7 +46,7 @@ def bitwise_addition_recursive(number: int, other_number: int) -> int: if carry == 0: return bitwise_sum - return sum_of_two_positive_numbers_bitwise(sum, carry << 1) + return bitwise_addition_recursive(sum, carry << 1) if __name__ == "__main__": From b1109a5bc590c995eda9972036df1ffe62bb4dd6 Mon Sep 17 00:00:00 2001 From: Tianyi Zheng Date: Wed, 27 Sep 2023 01:58:18 -0400 Subject: [PATCH 7/7] Update sum_of_two_positive_numbers_bitwise.py --- maths/sum_of_two_positive_numbers_bitwise.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/sum_of_two_positive_numbers_bitwise.py b/maths/sum_of_two_positive_numbers_bitwise.py index 3852907bb020..70eaf6887b64 100644 --- a/maths/sum_of_two_positive_numbers_bitwise.py +++ b/maths/sum_of_two_positive_numbers_bitwise.py @@ -46,7 +46,7 @@ def bitwise_addition_recursive(number: int, other_number: int) -> int: if carry == 0: return bitwise_sum - return bitwise_addition_recursive(sum, carry << 1) + return bitwise_addition_recursive(bitwise_sum, carry << 1) if __name__ == "__main__":