From 190afd4669c7c4fc3cfe82b7825913b07f27643b Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 7 Aug 2023 11:56:41 +0000 Subject: [PATCH 1/4] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index fdcf0ceedf1f..e6a1ff356143 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -585,6 +585,7 @@ * [Hardy Ramanujanalgo](maths/hardy_ramanujanalgo.py) * [Hexagonal Number](maths/hexagonal_number.py) * [Integration By Simpson Approx](maths/integration_by_simpson_approx.py) + * [Interquartile Range](maths/interquartile_range.py) * [Is Int Palindrome](maths/is_int_palindrome.py) * [Is Ip V4 Address Valid](maths/is_ip_v4_address_valid.py) * [Is Square Free](maths/is_square_free.py) From 6a6ebdea76f73ccb23f71078065300f59b4c709a Mon Sep 17 00:00:00 2001 From: CaedenPH Date: Wed, 16 Aug 2023 15:57:20 +0100 Subject: [PATCH 2/4] refactor(decimal-to-binary): Consolidate implementations --- conversions/decimal_to_binary.py | 67 +++++++++++++++++++--- conversions/decimal_to_binary_recursion.py | 53 ----------------- 2 files changed, 59 insertions(+), 61 deletions(-) delete mode 100644 conversions/decimal_to_binary_recursion.py diff --git a/conversions/decimal_to_binary.py b/conversions/decimal_to_binary.py index 973c47c8af67..ded4db02cbd2 100644 --- a/conversions/decimal_to_binary.py +++ b/conversions/decimal_to_binary.py @@ -1,27 +1,27 @@ """Convert a Decimal Number to a Binary Number.""" -def decimal_to_binary(num: int) -> str: +def decimal_to_binary_iterative(num: int) -> str: """ Convert an Integer Decimal Number to a Binary Number as str. - >>> decimal_to_binary(0) + >>> decimal_to_binary_iterative(0) '0b0' - >>> decimal_to_binary(2) + >>> decimal_to_binary_iterative(2) '0b10' - >>> decimal_to_binary(7) + >>> decimal_to_binary_iterative(7) '0b111' - >>> decimal_to_binary(35) + >>> decimal_to_binary_iterative(35) '0b100011' >>> # negatives work too - >>> decimal_to_binary(-2) + >>> decimal_to_binary_iterative(-2) '-0b10' >>> # other floats will error - >>> decimal_to_binary(16.16) # doctest: +ELLIPSIS + >>> decimal_to_binary_iterative(16.16) # doctest: +ELLIPSIS Traceback (most recent call last): ... TypeError: 'float' object cannot be interpreted as an integer >>> # strings will error as well - >>> decimal_to_binary('0xfffff') # doctest: +ELLIPSIS + >>> decimal_to_binary_iterative('0xfffff') # doctest: +ELLIPSIS Traceback (most recent call last): ... TypeError: 'str' object cannot be interpreted as an integer @@ -52,7 +52,58 @@ def decimal_to_binary(num: int) -> str: return "0b" + "".join(str(e) for e in binary) +def decimal_to_binary_recursive(decimal: int) -> str: + """ + Take a positive integer value and return its binary equivalent. + >>> decimal_to_binary_recursive(1000) + '1111101000' + >>> decimal_to_binary_recursive("72") + '1001000' + >>> decimal_to_binary_recursive("number") + Traceback (most recent call last): + ... + ValueError: invalid literal for int() with base 10: 'number' + """ + decimal = int(decimal) + if decimal in (0, 1): # Exit cases for the recursion + return str(decimal) + div, mod = divmod(decimal, 2) + return decimal_to_binary_recursive(div) + str(mod) + + +def decimal_to_binary_recursive_main(number: str) -> str: + """ + Take an integer value and raise ValueError for wrong inputs, + call the function above and return the output with prefix "0b" & "-0b" + for positive and negative integers respectively. + >>> decimal_to_binary_recursive_main(0) + '0b0' + >>> decimal_to_binary_recursive_main(40) + '0b101000' + >>> decimal_to_binary_recursive_main(-40) + '-0b101000' + >>> decimal_to_binary_recursive_main(40.8) + Traceback (most recent call last): + ... + ValueError: Input value is not an integer + >>> decimal_to_binary_recursive_main("forty") + Traceback (most recent call last): + ... + ValueError: Input value is not an integer + """ + number = str(number).strip() + if not number: + raise ValueError("No input value was provided") + negative = "-" if number.startswith("-") else "" + number = number.lstrip("-") + if not number.isnumeric(): + raise ValueError("Input value is not an integer") + return f"{negative}0b{decimal_to_binary_recursive(int(number))}" + + if __name__ == "__main__": import doctest doctest.testmod() + + print(decimal_to_binary_recursive_main(input("Input a decimal number: "))) diff --git a/conversions/decimal_to_binary_recursion.py b/conversions/decimal_to_binary_recursion.py deleted file mode 100644 index 05833ca670c3..000000000000 --- a/conversions/decimal_to_binary_recursion.py +++ /dev/null @@ -1,53 +0,0 @@ -def binary_recursive(decimal: int) -> str: - """ - Take a positive integer value and return its binary equivalent. - >>> binary_recursive(1000) - '1111101000' - >>> binary_recursive("72") - '1001000' - >>> binary_recursive("number") - Traceback (most recent call last): - ... - ValueError: invalid literal for int() with base 10: 'number' - """ - decimal = int(decimal) - if decimal in (0, 1): # Exit cases for the recursion - return str(decimal) - div, mod = divmod(decimal, 2) - return binary_recursive(div) + str(mod) - - -def main(number: str) -> str: - """ - Take an integer value and raise ValueError for wrong inputs, - call the function above and return the output with prefix "0b" & "-0b" - for positive and negative integers respectively. - >>> main(0) - '0b0' - >>> main(40) - '0b101000' - >>> main(-40) - '-0b101000' - >>> main(40.8) - Traceback (most recent call last): - ... - ValueError: Input value is not an integer - >>> main("forty") - Traceback (most recent call last): - ... - ValueError: Input value is not an integer - """ - number = str(number).strip() - if not number: - raise ValueError("No input value was provided") - negative = "-" if number.startswith("-") else "" - number = number.lstrip("-") - if not number.isnumeric(): - raise ValueError("Input value is not an integer") - return f"{negative}0b{binary_recursive(int(number))}" - - -if __name__ == "__main__": - from doctest import testmod - - testmod() From 2d1ba1b6f0b21f63841a057d97c683b2c7a1efa0 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Wed, 16 Aug 2023 14:57:52 +0000 Subject: [PATCH 3/4] updating DIRECTORY.md --- DIRECTORY.md | 1 - 1 file changed, 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 8d1567465fbc..7157715bc6d6 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -145,7 +145,6 @@ * [Binary To Octal](conversions/binary_to_octal.py) * [Decimal To Any](conversions/decimal_to_any.py) * [Decimal To Binary](conversions/decimal_to_binary.py) - * [Decimal To Binary Recursion](conversions/decimal_to_binary_recursion.py) * [Decimal To Hexadecimal](conversions/decimal_to_hexadecimal.py) * [Decimal To Octal](conversions/decimal_to_octal.py) * [Energy Conversions](conversions/energy_conversions.py) From 87c53d27a69a7750cd5a247ee2f1659ac788f042 Mon Sep 17 00:00:00 2001 From: CaedenPH Date: Mon, 21 Aug 2023 14:14:53 +0100 Subject: [PATCH 4/4] refactor(decimal-to-binary): Rename main and helper recursive --- conversions/decimal_to_binary.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/conversions/decimal_to_binary.py b/conversions/decimal_to_binary.py index ded4db02cbd2..cf2b6040ec2a 100644 --- a/conversions/decimal_to_binary.py +++ b/conversions/decimal_to_binary.py @@ -52,14 +52,14 @@ def decimal_to_binary_iterative(num: int) -> str: return "0b" + "".join(str(e) for e in binary) -def decimal_to_binary_recursive(decimal: int) -> str: +def decimal_to_binary_recursive_helper(decimal: int) -> str: """ Take a positive integer value and return its binary equivalent. - >>> decimal_to_binary_recursive(1000) + >>> decimal_to_binary_recursive_helper(1000) '1111101000' - >>> decimal_to_binary_recursive("72") + >>> decimal_to_binary_recursive_helper("72") '1001000' - >>> decimal_to_binary_recursive("number") + >>> decimal_to_binary_recursive_helper("number") Traceback (most recent call last): ... ValueError: invalid literal for int() with base 10: 'number' @@ -68,25 +68,25 @@ def decimal_to_binary_recursive(decimal: int) -> str: if decimal in (0, 1): # Exit cases for the recursion return str(decimal) div, mod = divmod(decimal, 2) - return decimal_to_binary_recursive(div) + str(mod) + return decimal_to_binary_recursive_helper(div) + str(mod) -def decimal_to_binary_recursive_main(number: str) -> str: +def decimal_to_binary_recursive(number: str) -> str: """ Take an integer value and raise ValueError for wrong inputs, call the function above and return the output with prefix "0b" & "-0b" for positive and negative integers respectively. - >>> decimal_to_binary_recursive_main(0) + >>> decimal_to_binary_recursive(0) '0b0' - >>> decimal_to_binary_recursive_main(40) + >>> decimal_to_binary_recursive(40) '0b101000' - >>> decimal_to_binary_recursive_main(-40) + >>> decimal_to_binary_recursive(-40) '-0b101000' - >>> decimal_to_binary_recursive_main(40.8) + >>> decimal_to_binary_recursive(40.8) Traceback (most recent call last): ... ValueError: Input value is not an integer - >>> decimal_to_binary_recursive_main("forty") + >>> decimal_to_binary_recursive("forty") Traceback (most recent call last): ... ValueError: Input value is not an integer @@ -98,7 +98,7 @@ def decimal_to_binary_recursive_main(number: str) -> str: number = number.lstrip("-") if not number.isnumeric(): raise ValueError("Input value is not an integer") - return f"{negative}0b{decimal_to_binary_recursive(int(number))}" + return f"{negative}0b{decimal_to_binary_recursive_helper(int(number))}" if __name__ == "__main__": @@ -106,4 +106,4 @@ def decimal_to_binary_recursive_main(number: str) -> str: doctest.testmod() - print(decimal_to_binary_recursive_main(input("Input a decimal number: "))) + print(decimal_to_binary_recursive(input("Input a decimal number: ")))