बहुमत फ़ंक्शन एक बूलियन फ़ंक्शन है जो तीन बूलियन इनपुट लेता है और सबसे आम रिटर्न करता है। उदाहरण के लिए, यदि maj(x,y,z)
बहुमत कार्य करता है और T
सत्य को दर्शाता है और 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 वैक्टर की सूची देता है और यदि संभव हो तो दिए गए सभी वैक्टरों पर सही रिटर्न देने वाले बहुमत गेट्स का एक ट्री आउटपुट करता है। फ़ंक्शन वैक्टर पर सही या गलत हो सकता है, अड़चन की सूची में नहीं।
वैक्टर की सूची आपके पसंद के किसी भी प्रारूप में इनपुट हो सकती है। यदि आप वेक्टर को इनपुट करने के बजाय पसंद करते हैं, तो आप वेक्टर में सच्चे पदों की सूची को इनपुट कर सकते हैं। उदाहरण के लिए,
[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
समकक्ष हैं।
स्कोरिंग
यह कोड गोल्फ है: बाइट्स जीत में सबसे छोटा समाधान।
परीक्षण के मामलों:
ध्यान दें कि इन मामलों में से प्रत्येक के लिए कई संभावित आउटपुट हैं, इसलिए आपको एक चेकर स्क्रिप्ट लिखनी चाहिए जो आपके आउटपुट को फ़ंक्शन में परिवर्तित करती है और जांचें कि आपका फ़ंक्शन निर्दिष्ट इनपुट वैक्टर में से प्रत्येक पर सही है।
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]]]]]