두 개의 이진 변수 A와 B에 대해 16 개의 고유 한 부울 함수 가 있습니다 .
A B | F0 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | F13 | F14 | F15
-----------------------------------------------------------------------------------------
0 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1
0 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1
1 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1
1 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1
<
일반적으로 NOT, AND 또는 OR과 같은 논리 연산자로 생각되지 않는 less than 연산자 는 실제로 부울 값에 적용될 때 다음 함수 (F4) 중 하나입니다.
A B | A < B
-----------
0 0 | 0
0 1 | 1
1 0 | 0
1 1 | 0
흥미롭게도, 우리는 시뮬레이션 할 수 있는 경우에만 문자 표현식을 사용하여 15 개 다른 기능을 ()<AB10
. 이러한 표현식은 많은 표준 프로그래밍 언어에서와 같이 읽고 평가됩니다. 예를 들어 괄호는 <
양쪽에 모두 일치 해야하며 인수가 있어야합니다.
특히 이러한 표현은 다음 문법 ( Backus-Naur 형식으로 제공 )을 준수해야합니다 .
element ::= A | B | 1 | 0
expression ::= element<element | (expression)<element | element<(expression) | (expression)<(expression)
이것은 쓸모없는 paretheses와 형태의 표현이 A<B<1
허용되지 않음을 의미합니다 .
따라서 표현식 A<B
은 함수 F4와 일치하며 또는 A<B<1
로 변경해야합니다 .(A<B)<1
A<(B<1)
15 개의 다른 함수가 모두 표현식으로 변환 될 수 있음을 증명하기 위해, 기능적으로 완전한 일련의 표현식을 형성하면 충분합니다. 정의에 따라 모든 함수에 대한 표현식으로 구성 될 수 있기 때문입니다.
식 중 하나 개를 이러한 세트이다 x<1
(여기서, x
인 A
또는 B
) 인 ¬x
및 (((B<A)<1)<A)<1
인 A → B
. 부정 ( ¬
)과 의미 ( →
)는 기능적으로 완전한 것으로 알려져 있습니다 .
도전
문자를 사용하여 ()<AB10
16 개의 고유 한 부울 함수 각각에 해당하는 위에서 설명한 형식으로 16 개의 표현식을 작성하십시오.
목표는 각 표현을 가능한 한 짧게 만드는 것입니다. 당신의 점수는 각 16 개의 표현에있는 문자 수의 합입니다. 가장 낮은 점수가 이깁니다. Tiebreaker는 가장 빠른 답변으로갑니다 (나중에 다른 사람의 짧은 표현으로 답변을 편집하지 않은 경우).
기술적으로이 콘테스트에 실제 코드를 작성할 필요는 없지만 식 생성에 도움이되는 프로그램을 작성한 경우 해당 코드를 게시하는 것이 좋습니다.
이 스택 스 니펫을 사용하여 표현식이 예상 한 작업을 수행하는지 확인할 수 있습니다.