From fd24874aa68f0454235562915af9e81115958d64 Mon Sep 17 00:00:00 2001 From: TTAAAN <122733793+TTAAAN@users.noreply.github.com> Date: Mon, 4 May 2026 11:31:38 +0700 Subject: [PATCH 1/5] feat: add n_input_nand_gate function to compute NAND for multiple inputs --- boolean_algebra/nand_gate.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/boolean_algebra/nand_gate.py b/boolean_algebra/nand_gate.py index ea7a6815dcc9..48e9a7c57420 100644 --- a/boolean_algebra/nand_gate.py +++ b/boolean_algebra/nand_gate.py @@ -30,6 +30,21 @@ def nand_gate(input_1: int, input_2: int) -> int: return int(not (input_1 and input_2)) +def n_input_nand_gate(inputs: list[int]) -> int: + """ + Calculate NAND of a list of input values + >>> n_input_nand_gate([1, 0, 1, 1, 0]) + 1 + >>> n_input_nand_gate([1, 1, 1, 1, 1]) + 0 + >>> n_input_nand_gate([0, 0, 0, 0, 0]) + 1 + >>> n_input_nand_gate([1, 0, 0, 0, 0]) + 1 + """ + return int(not all(inputs)) + + if __name__ == "__main__": import doctest From 8ec32ab0d848f6ecb0c9f893380d4f297370915c Mon Sep 17 00:00:00 2001 From: TTAAAN <122733793+TTAAAN@users.noreply.github.com> Date: Mon, 4 May 2026 11:35:06 +0700 Subject: [PATCH 2/5] fix: enforce input length restriction in n_input_nand_gate function --- boolean_algebra/nand_gate.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/boolean_algebra/nand_gate.py b/boolean_algebra/nand_gate.py index 48e9a7c57420..8edda2e4526c 100644 --- a/boolean_algebra/nand_gate.py +++ b/boolean_algebra/nand_gate.py @@ -42,6 +42,10 @@ def n_input_nand_gate(inputs: list[int]) -> int: >>> n_input_nand_gate([1, 0, 0, 0, 0]) 1 """ + + if len(inputs) > 2: + raise ValueError("Input list must contain at most two elements") + return int(not all(inputs)) From 4ca9e04565d1d9a914f776df5cb4df778cc073f0 Mon Sep 17 00:00:00 2001 From: TTAAAN <122733793+TTAAAN@users.noreply.github.com> Date: Mon, 4 May 2026 11:41:08 +0700 Subject: [PATCH 3/5] fix: update input length restriction in n_input_nand_gate function to at least 2 elements --- boolean_algebra/nand_gate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boolean_algebra/nand_gate.py b/boolean_algebra/nand_gate.py index 8edda2e4526c..eb3e0e69a94d 100644 --- a/boolean_algebra/nand_gate.py +++ b/boolean_algebra/nand_gate.py @@ -43,8 +43,8 @@ def n_input_nand_gate(inputs: list[int]) -> int: 1 """ - if len(inputs) > 2: - raise ValueError("Input list must contain at most two elements") + if len(inputs) > 1: + raise ValueError("Input list must contain at least two elements") return int(not all(inputs)) From 2c6c4b2aed13302d13e71e64f39a6c8b42eb636e Mon Sep 17 00:00:00 2001 From: TTAAAN <122733793+TTAAAN@users.noreply.github.com> Date: Mon, 4 May 2026 11:48:43 +0700 Subject: [PATCH 4/5] fix: correct input length check in n_input_nand_gate function to raise error for insufficient elements --- boolean_algebra/nand_gate.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/boolean_algebra/nand_gate.py b/boolean_algebra/nand_gate.py index eb3e0e69a94d..95d4cd644b1a 100644 --- a/boolean_algebra/nand_gate.py +++ b/boolean_algebra/nand_gate.py @@ -41,9 +41,17 @@ def n_input_nand_gate(inputs: list[int]) -> int: 1 >>> n_input_nand_gate([1, 0, 0, 0, 0]) 1 + + >>> n_input_nand_gate([1, 1]) + 0 + + >>> n_input_nand_gate([1]) + Traceback (most recent call last): + ... + ValueError: Input list must contain at least two elements """ - if len(inputs) > 1: + if len(inputs) < 2: raise ValueError("Input list must contain at least two elements") return int(not all(inputs)) From d872eb8e3532a7e038e707f1801ab8010b3f616d Mon Sep 17 00:00:00 2001 From: TTAAAN <122733793+TTAAAN@users.noreply.github.com> Date: Tue, 5 May 2026 13:19:28 +0700 Subject: [PATCH 5/5] refactor: enhance input validation in n_input_nand_gate function to check for empty list and values that are not 0 and 1 --- boolean_algebra/nand_gate.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/boolean_algebra/nand_gate.py b/boolean_algebra/nand_gate.py index 95d4cd644b1a..0a377143e153 100644 --- a/boolean_algebra/nand_gate.py +++ b/boolean_algebra/nand_gate.py @@ -32,7 +32,10 @@ def nand_gate(input_1: int, input_2: int) -> int: def n_input_nand_gate(inputs: list[int]) -> int: """ - Calculate NAND of a list of input values + Generalization of nand_gate() to support n inputs. + Calculate NAND of a list of input values. + Returns 0 only when all inputs are 1, 1 otherwise. + >>> n_input_nand_gate([1, 0, 1, 1, 0]) 1 >>> n_input_nand_gate([1, 1, 1, 1, 1]) @@ -45,14 +48,28 @@ def n_input_nand_gate(inputs: list[int]) -> int: >>> n_input_nand_gate([1, 1]) 0 + >>> n_input_nand_gate([]) + Traceback (most recent call last): + ... + ValueError: Input list cannot be empty + >>> n_input_nand_gate([1]) Traceback (most recent call last): ... ValueError: Input list must contain at least two elements + + >>> n_input_nand_gate([2, 1]) + Traceback (most recent call last): + ... + ValueError: All inputs must be 0 or 1 """ + if len(inputs) == 0: + raise ValueError("Input list cannot be empty") if len(inputs) < 2: raise ValueError("Input list must contain at least two elements") + if not all(i in (0, 1) for i in inputs): + raise ValueError("All inputs must be 0 or 1") return int(not all(inputs))