From 6a6c5be681f3b811615881b921473e4a7ddc4d8a Mon Sep 17 00:00:00 2001 From: Ranjita1708 Date: Sun, 16 Nov 2025 20:30:36 +0530 Subject: [PATCH 1/3] feat(boolean_algebra): add half adder Implementation --- boolean_algebra/half_adder.py | 46 +++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 boolean_algebra/half_adder.py diff --git a/boolean_algebra/half_adder.py b/boolean_algebra/half_adder.py new file mode 100644 index 000000000000..838287757ffc --- /dev/null +++ b/boolean_algebra/half_adder.py @@ -0,0 +1,46 @@ +""" +A Half Adder is a basic combinational circuit in digital logic. +It computes the sum and carry outputs for two input bits. + +Truth Table: + ------------------------- + | Input A | Input B | Sum | Carry | + ------------------------- + | 0 | 0 | 0 | 0 | + | 0 | 1 | 1 | 0 | + | 1 | 0 | 1 | 0 | + | 1 | 1 | 0 | 1 | + ------------------------- + +Refer - https://en.wikipedia.org/wiki/Adder_(electronics)#Half_adder +""" + + +def half_adder(a: int, b: int) -> tuple[int, int]: + """ + Compute the sum and carry for a Half Adder. + + >>> half_adder(0, 0) + (0, 0) + >>> half_adder(0, 1) + (1, 0) + >>> half_adder(1, 0) + (1, 0) + >>> half_adder(1, 1) + (0, 1) + + Raises: + ValueError: If inputs are not 0 or 1. + """ + if a not in (0, 1) or b not in (0, 1): + raise ValueError("Inputs must be 0 or 1") + + sum_bit = a ^ b + carry_bit = a & b + return sum_bit, carry_bit + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 4f129876b068d34a8eb0f9444aaa43bd38bb2258 Mon Sep 17 00:00:00 2001 From: Ranjita1708 Date: Sun, 16 Nov 2025 22:42:05 +0530 Subject: [PATCH 2/3] feat(boolean_algebra): add full adder implementation --- .gitignore | 1 + boolean_algebra/full_adder.py | 67 +++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 boolean_algebra/full_adder.py diff --git a/.gitignore b/.gitignore index baea84b8d1f1..c30403ceb2f7 100644 --- a/.gitignore +++ b/.gitignore @@ -108,3 +108,4 @@ venv.bak/ .try .vscode/ .vs/ +scripts/python3.bat \ No newline at end of file diff --git a/boolean_algebra/full_adder.py b/boolean_algebra/full_adder.py new file mode 100644 index 000000000000..24b41f151125 --- /dev/null +++ b/boolean_algebra/full_adder.py @@ -0,0 +1,67 @@ +""" +A Full Adder is a fundamental combinational circuit in digital logic. +It computes the sum and carry outputs for two input bits and an input carry bit. + +Truth Table: + ----------------------------------------- + | A | B | Cin | Sum | Cout | + ----------------------------------------- + | 0 | 0 | 0 | 0 | 0 | + | 0 | 1 | 0 | 1 | 0 | + | 1 | 0 | 0 | 1 | 0 | + | 1 | 1 | 0 | 0 | 1 | + | 0 | 0 | 1 | 1 | 0 | + | 0 | 1 | 1 | 0 | 1 | + | 1 | 0 | 1 | 0 | 1 | + | 1 | 1 | 1 | 1 | 1 | + ----------------------------------------- + +Refer: +https://en.wikipedia.org/wiki/Adder_(electronics)#Full_adder +""" + + +def full_adder(a: int, b: int, cin: int) -> tuple[int, int]: + """ + Compute the sum and carry-out for a Full Adder. + + Args: + a: First input bit (0 or 1). + b: Second input bit (0 or 1). + cin: Carry-in bit (0 or 1). + + Returns: + A tuple `(sum_bit, carry_out)`. + + >>> full_adder(0, 0, 0) + (0, 0) + >>> full_adder(0, 1, 0) + (1, 0) + >>> full_adder(1, 0, 0) + (1, 0) + >>> full_adder(1, 1, 0) + (0, 1) + >>> full_adder(0, 0, 1) + (1, 0) + >>> full_adder(1, 1, 1) + (1, 1) + + Raises: + ValueError: If any input is not 0 or 1. + """ + if a not in (0, 1) or b not in (0, 1) or cin not in (0, 1): + raise ValueError("Inputs must be 0 or 1.") + + # Sum is XOR of the inputs + sum_bit = a ^ b ^ cin + + # Carry-out is true if any two or more inputs are 1 + carry_out = (a & b) | (b & cin) | (a & cin) + + return sum_bit, carry_out + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From e124846e0636a186abe4ded8df90e8fc7401d6c4 Mon Sep 17 00:00:00 2001 From: Ranjita1708 Date: Sun, 16 Nov 2025 23:17:25 +0530 Subject: [PATCH 3/3] feat(boolean_algebra): add full adder implementation --- boolean_algebra/full_adder.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/boolean_algebra/full_adder.py b/boolean_algebra/full_adder.py index 24b41f151125..55b845ff1849 100644 --- a/boolean_algebra/full_adder.py +++ b/boolean_algebra/full_adder.py @@ -21,14 +21,14 @@ """ -def full_adder(a: int, b: int, cin: int) -> tuple[int, int]: +def full_adder(input_a: int, input_b: int, carry_in: int) -> tuple[int, int]: """ Compute the sum and carry-out for a Full Adder. Args: - a: First input bit (0 or 1). - b: Second input bit (0 or 1). - cin: Carry-in bit (0 or 1). + input_a: First input bit (0 or 1). + input_b: Second input bit (0 or 1). + carry_in: Carry-in bit (0 or 1). Returns: A tuple `(sum_bit, carry_out)`. @@ -49,14 +49,14 @@ def full_adder(a: int, b: int, cin: int) -> tuple[int, int]: Raises: ValueError: If any input is not 0 or 1. """ - if a not in (0, 1) or b not in (0, 1) or cin not in (0, 1): + if input_a not in (0, 1) or input_b not in (0, 1) or carry_in not in (0, 1): raise ValueError("Inputs must be 0 or 1.") # Sum is XOR of the inputs - sum_bit = a ^ b ^ cin + sum_bit = input_a ^ input_b ^ carry_in # Carry-out is true if any two or more inputs are 1 - carry_out = (a & b) | (b & cin) | (a & cin) + carry_out = (input_a & input_b) | (input_b & carry_in) | (input_a & carry_in) return sum_bit, carry_out