diff --git a/boolean_algebra/imply_gate.py b/boolean_algebra/imply_gate.py index b64ebaceb306..733154b3bf3c 100644 --- a/boolean_algebra/imply_gate.py +++ b/boolean_algebra/imply_gate.py @@ -33,6 +33,32 @@ def imply_gate(input_1: int, input_2: int) -> int: return int(input_1 == 0 or input_2 == 1) +def recursive_imply_list(input_list: list[int]) -> int: + """ + Recursively calculates the implication of a list. + Strictly The Implication is Applied Consecuteivly left to right: + ( (a -> b) -> c ) -> d ... + + >>> recursive_imply_list([]) + 1 + >>> recursive_imply_list([0]) + 0 + >>> recursive_imply_list([1]) + 1 + >>> recursive_imply_list([1, 0, 1]) + 1 + >>> recursive_imply_list([1, 1, 0]) + 0 + """ + if not input_list: + return 1 + if len(input_list) == 1: + return input_list[0] + first_implication = imply_gate(input_list[0], input_list[1]) + new_list = [first_implication, *input_list[2:]] + return recursive_imply_list(new_list) + + if __name__ == "__main__": import doctest