Hàm đa số là hàm boolean có ba đầu vào boolean và trả về phổ biến nhất. Chẳng hạn, nếu maj(x,y,z)
là hàm đa số và T
biểu thị true và F
biểu thị false thì:
maj(T,T,T) = T
maj(T,T,F) = T
maj(T,F,F) = F
maj(F,F,F) = F
Câu hỏi này liên quan đến việc viết các hàm boolean như là các thành phần của các hàm đa số. Một ví dụ về thành phần 5 ary của các chức năng đa số là (x1,x2,x3,x4,x5) => maj(x1,x2,maj(x3,x4,x5))
. Hàm này trả về đầu ra sau trên các vectơ đầu vào mẫu này:
(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
Bài tập
Viết chương trình nhập số nguyên dương n và danh sách các vectơ n dài của booleans và xuất ra một cây cổng đa số trả về giá trị true trên tất cả các vectơ đã cho nếu có thể. Hàm có thể trả về đúng hoặc sai trên các vectơ không có trong danh sách các ràng buộc.
Danh sách các vectơ có thể được nhập vào ở bất kỳ định dạng nào bạn muốn. Nếu bạn thích, thay vì nhập vectơ, bạn có thể nhập danh sách các vị trí thực trong vectơ. Vì vậy, ví dụ,
[TTF,TFT,FTT]
hoặc[[T,T,F],[T,F,T],[F,T,T]]
hoặc[[1,2],[1,3],[2,3]]
(danh sách các vị trí true) đều tốt.Đầu ra có thể là bất kỳ định dạng cây hợp lệ. Ví dụ,
maj(maj(x1,x2,x3),x4,x5)
công trình. Bạn có thể sẽ muốn sử dụng các số duy nhất làm số độc lập cho các biến, như trong[[1,2,3],4,5]
. Đánh bóng ngược123m45m
cũng không sao, chẳng hạn.Nếu không có chức năng nào hoạt động, chương trình của bạn sẽ tạo ra lỗi hoặc xuất giá trị falsey.
Nếu có nhiều chức năng hoạt động, chương trình của bạn có thể trả về bất kỳ chức năng nào trong số đó. Các chức năng không cần phải được đơn giản hóa. Ví dụ,
maj(x1,x1,x2)
hoặcx1
là tương đương.
Chấm điểm
Đây là mã golf: Giải pháp ngắn nhất trong byte thắng.
Các trường hợp thử nghiệm:
Lưu ý rằng có nhiều đầu ra có thể có cho mỗi trường hợp này, vì vậy bạn nên viết một tập lệnh kiểm tra chuyển đổi đầu ra của bạn thành một hàm và kiểm tra xem hàm của bạn có trả về đúng trên từng vectơ đầu vào đã chỉ định không.
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]]]]]