# 아래 나와있는 규칙은 회로로 만든 함수 안에서만 적용 # 허용된 함수: return, 사용자가 정의한 함수 # 허용된 연산자(두 값의 연산으로 사용될 때): !, &, |, ^, = # 허용된 자료형: bool, tuple def main() -> None: from functools import wraps # 기본 함수 (회로 밖에서만) def circuit(func): # decorator function @wraps(func) def wrapper(*args): # wrapper function return func(*args) return wrapper def BoolToStr(bools: tuple[bool]): retstr = '' for i in range(len(bools)): if bools[i]: retstr += '1' else: retstr += '0' return retstr # 회로 만들기 @circuit def Add1Dgt(in1: bool, in2: bool) -> tuple: firstdgt: bool = in1 ^ in2 seconddgt: bool = in1 & in2 return (seconddgt, firstdgt) def Add2dgt(in1: bool, in2: bool) -> tuple: # 테스트 print(BoolToStr(Add1Dgt(1, 1))) print(BoolToStr(Add1Dgt(1, 0))) print(BoolToStr(Add1Dgt(0, 1))) print(BoolToStr(Add1Dgt(0, 0))) if __name__ == '__main__': main()