문제 › 105

105. 규칙 엔진

Hard 바이브코딩 MCPRulesEngine
문제 설명
[문제] 조건-액션(condition-action) 규칙 엔진 MCP 서버를 구현한다. 규칙 엔진은 "어떤 조건이 참이면 어떤 액션을 한다"는 규칙들을 등록해 두고, 입력 데이터에 대해 조건을 평가하여 참인 규칙들의 액션을 모아 돌려준다. 예를 들어 조건 "data['x']>30", 액션 "alert"를 등록한 뒤 데이터 {"x": 35}를 평가하면 조건이 참이므로 ["alert"]가 나온다. 각 규칙은 (조건, 액션) 쌍으로 저장된다. 조건은 데이터를 참조하는 불리언 표현식 문자열이며, 입력 데이터 객체를 data라는 이름으로 참조한다(예: "data['x']>30"). 서버는 규칙 목록을 추가 순서대로 유지하며 시작 시 비어 있다. [구현할 함수] - add_rule(condition: str, action: str) -> int 새 규칙(조건, 액션)을 추가한다. 추가 후 전체 규칙 개수를 반환한다. - evaluate_rules(data: dict) -> 문자열 배열 등록된 모든 규칙의 조건을 입력 데이터로 평가하여, 조건이 참인 규칙들의 액션을 등록 순서대로 모아 배열로 반환한다. 매칭 규칙이 없으면 빈 배열. - get_matching_rules(data: dict) -> 문자열 배열 evaluate_rules와 동일하게, 매칭되는 규칙들의 액션 배열을 반환한다. [입력·상태] condition·action은 문자열, data는 키-값 객체다. 규칙 목록은 호출 간에 유지된다. [제약] - 등록된 규칙이 없으면 evaluate_rules·get_matching_rules는 빈 배열을 반환한다. - 조건은 입력 데이터를 data라는 이름으로 참조하는 불리언 표현식 문자열이다. [힌트] 문자열로 된 조건식을 런타임에 평가해야 한다 (Python: eval / C++·Java: 간단한 표현식 파서나 미리 정한 연산자 처리). 외부 입력 평가는 보안에 주의. [예시] add_rule("data['x']>30", "alert"), evaluate_rules({"x": 35}) -> ["alert"] add_rule("data['x']>30", "alert"), evaluate_rules({"x": 25}) -> [] # 조건 거짓 (빈 상태) evaluate_rules({"x": 35}) -> [] # 규칙 없음
로그인하고 풀기 AI가 자동 채점하고 즉시 정답·해설을 알려줘요. 무료.