이 작업은 비트 합에 대한 작은 논리식을 찾을 수있는 코드를 작성하는 것입니다.
전반적인 문제는 코드에서 y 이진 0/1 변수의 합이 값 x와 같은지 확인하기 위해 가능한 가장 작은 제안 논리 수식을 찾는 것입니다. 변수 x1, x2, x3, x4 등을 호출 해 봅시다. 식은 합과 같아야합니다. 즉, 합이 x와 같은 경우에만 논리 공식이 참이어야합니다.
여기부터 시작하는 순진한 방법이 있습니다. y = 15와 x = 5라고 말합니다. 5 개의 변수를 선택하는 3003 가지 방법을 모두 선택하고 각각에 대해 해당 변수의 AND와 나머지 변수의 부정의 AND를 사용하여 새로운 절을 만듭니다. 총 비용 45054에 대해 길이가 각각 정확히 15 인 3003 개의 절로 끝납니다.
당신의 대답은 파이썬에 붙여 넣을 수있는 그런 종류의 논리적 표현이어야합니다. 그래서 테스트 할 수 있습니다. 두 사람이 같은 크기의 표현을 얻는다면 가장 빠른 코드가 승리합니다.
솔루션에 새로운 변수를 도입 할 수 있습니다. 따라서이 경우 논리 공식은 y 이진 변수, x 및 일부 새 변수로 구성됩니다. y 변수의 합이 x와 같은 경우에만 전체 공식을 만족할 수 있습니다.
시작 연습으로 일부 사람들은 x = 2에 더하는 y = 5 변수로 시작하기를 원할 수 있습니다. 순진한 방법으로 비용이 50이됩니다.
코드는 두 개의 값 y와 x를 입력으로 받아 수식과 그 크기를 출력으로 출력해야합니다. 솔루션 비용은 출력에서 변수의 원시 개수입니다. 따라서 (a or b) and (!a or c)
허용되는 연산자는 and
, or
및 not
입니다.
업데이트 그것은이 밝혀 영리한 방법 이 문제 X = 1, 적어도 이론을 해결하기위한이.
z[0] = y[0] and y[1]
어떻게 표시 하시겠습니까?
z[0]
나타내 y[0] or y[1]
려면 다음과 같은 절 (y[0] or y[1]) or not z[0]
(또는 허용되는 3 개의 연산자를 사용하는 동등한 문장) 을 도입하면 됩니다.