대다수 함수는 3 개의 부울 입력을 가져 와서 가장 일반적인 부울 함수입니다. 예를 들어 maj(x,y,z)
대다수 함수가 T
true이고 true를 F
나타내는 경우 :
maj(T,T,T) = T
maj(T,T,F) = T
maj(T,F,F) = F
maj(F,F,F) = F
이 질문은 부울 함수를 대다수 함수의 구성으로 작성하는 것과 관련이 있습니다. 대다수 함수의 5 진 구성 예는 (x1,x2,x3,x4,x5) => maj(x1,x2,maj(x3,x4,x5))
입니다. 이 함수는 이러한 샘플 입력 벡터에서 다음 출력을 반환합니다.
(T,T,F,F,F) => maj(T,T,maj(F,F,F)) = maj(T,T,F) = T
(T,F,T,T,F) => maj(T,F,maj(T,T,F)) = maj(T,F,T) = T
(T,F,T,F,F) => maj(T,F,maj(T,F,F)) = maj(T,F,F) = F
(F,F,F,T,T) => maj(F,F,maj(F,T,T)) = maj(F,F,T) = F
직무
부울의 양의 정수 n과 길이 n 벡터의 목록을 입력하고 가능한 경우 주어진 모든 벡터에서 true를 반환하는 다수 게이트의 트리를 출력하는 프로그램을 작성하십시오. 이 함수는 구속 조건 목록에없는 벡터에서 true 또는 false를 반환 할 수 있습니다.
벡터 목록은 원하는 형식으로 입력 할 수 있습니다. 원하는 경우 벡터를 입력하는 대신 벡터에서 실제 위치 목록을 입력 할 수 있습니다. 그래서 예를 들어,
[TTF,TFT,FTT]
또는[[T,T,F],[T,F,T],[F,T,T]]
또는[[1,2],[1,3],[2,3]]
(실제 위치의 목록은) 모두 정상입니다.출력은 유효한 트리 형식 일 수 있습니다. 예를 들어
maj(maj(x1,x2,x3),x4,x5)
작동합니다. 에서와 같이 단일 숫자를 변수의 독립형으로 사용하려고 할 것입니다[[1,2,3],4,5]
.123m45m
예를 들어 리버스 폴리싱 도 가능합니다.작동하는 기능이 없으면 프로그램이 오류를 생성하거나 잘못된 값을 출력해야합니다.
작동하는 여러 기능이있는 경우 프로그램에서 해당 기능을 반환 할 수 있습니다. 기능을 단순화 할 필요는 없습니다. 예를 들어
maj(x1,x1,x2)
또는x1
동등합니다.
채점
이것은 코드 골프입니다 : 바이트 단위의 최단 솔루션이 승리합니다.
테스트 사례 :
이러한 경우마다 가능한 많은 출력이 있으므로 출력을 함수로 변환하고 지정된 각 입력 벡터에서 함수가 true를 반환하는지 확인하는 검사기 스크립트를 작성해야합니다.
Input: 3, [TFF]
Output: 1 or [1,1,2] or [1,[1,2,2],[1,1,3]] or other equivalent
Input: 3, [TFF,FTF]
Output: Falsey or error (it's not possible)
Input: 3, [TTF,TFT]
Output: [1,2,3] or 1 or other equivalent
Input: 3, [TTF,TFT,FTT]
Output: [1,2,3] or [1,3,2] or other equivalent
Input: 4, [TTFF,TFTF,FFTT]
Output: Falsey or error
Input: 4, [TTTF,TTFT,TFTT,FTTT]
Output: [1, 2, 3] or [2,3,4], or many other options
Input: 5, [TTTFF,FTTFT,TFFFT]
Output: [1,[1,[1,2,5],[2,4,5]],3] or many other options
Input: 6, [TTTFFF,FTFTTF,TFFTFT]
Output: [1, 2, 4] or [1, [1, 2, 4], [2, 3, 4]] or others
Input: 5, [TTTFF,TTFTF,TTFFT,TFTTF,TFTFT,TFFTT,FTTTF,FTTFT,FTFTT,FFTTT]
Output: [[1, [1, 3, 5], 4], [1, 2, [2, 4, 5]], [2, 3, [3, 4, 5]]] or others
Input: 7, [TTTTFFF,TTTFTFF,TTTFFTF,TTTFFFT,TTFTTFF,TTFTFTF,TTFTFFT,TTFFTTF,TTFFTFT,TTFFFTT,TFTTTFF,TFTTFTF,TFTTFFT,TFTFTTF,TFTFTFT,TFTFFTT,TFFTTTF,TFFTTFT,TFFTFTT,TFFFTTT,FTTTTFF,FTTTFTF,FTTTFFT,FTTFTTF,FTTFTFT,FTTFFTT,FTFTTTF,FTFTTFT,FTFTFTT,FTFFTTT,FFTTTTF,FFTTTFT,FFTTFTT,FFTFTTT,FFFTTTT]
Output: [[[1, [1, [1, 4, 7], 6], 5], [1, [1, 3, [3, 6, 7]], [3, 5, [5, 6, 7]]], [3, 4, [4, [4, 5, 7], 6]]], [[1, [1, [1, 4, 7], 6], 5], [1, 2, [2, [2, 5, 7], 6]], [2, [2, 4, [4, 6, 7]], [4, 5, [5, 6, 7]]]], [[2, [2, [2, 4, 7], 6], 5], [2, 3, [3, [3, 5, 7], 6]], [3, [3, 4, [4, 6, 7]], [4, 5, [5, 6, 7]]]]]