मेरे पूर्णांक अलग करें


21

परिचय

गणित के क्षेत्र में जिसे टोपोलॉजी के रूप में जाना जाता है , वहाँ पृथक्करण स्वयंसिद्ध नामक चीजें हैं । सहज रूप से, आपके पास एक सेट Xऔर सबसेट का एक संग्रह है X, जिसे हम गुणों के रूप में सोच सकते हैं। प्रणाली अच्छी तरह से अलग हो जाती है, अगर कोई Xअपने गुणों के आधार पर सभी वस्तुओं के बीच अंतर कर सकता है । पृथक्करण स्वयंसिद्ध इस विचार को औपचारिक बनाता है। इस चुनौती में, आपका कार्य तीन पृथक्करण स्वयंसिद्धों, दी गई Xऔर गुणों की सूची की जाँच करना है।

इनपुट

आपके इनपुट एक पूर्णांक हैं n ≥ 2, और पूर्णांकों की सूची Tकी एक सूची है । इसमें पूर्णांकों Tको तैयार किया गया है X = [0, 1, ..., n-1]। सूचियां Tखाली और अनसोल्ड हो सकती हैं, लेकिन उनमें डुप्लिकेट नहीं होंगे।

उत्पादन

आपका आउटपुट चार स्ट्रिंग्स में से एक है, जो तीन पृथक्करण स्वयंसिद्धों द्वारा निर्धारित किया गया है, प्रत्येक अंतिम से अधिक मजबूत है। अन्य स्वयंसिद्ध हैं, लेकिन हम सादगी के लिए इनसे चिपके रहते हैं।

  • मान लीजिए कि सभी विशिष्ट xऔर yभीतर के लिए X, Tउनमें से एक को शामिल करने की सूची मौजूद है । तब Xऔर स्वयंसिद्ध T0 कोT संतुष्ट करें ।
  • मान लीजिए कि सभी विशिष्ट xऔर yभीतर के लिए X, दो सूचियाँ मौजूद हैं T, जिनमें से एक में सम्‍मिलित है , xलेकिन yदूसरे में yसम्‍मिलित नहीं है x। तब Xऔर स्वयंसिद्ध T1 कोT संतुष्ट करें ।
  • मान लीजिए कि ऊपर दी गई दो सूचियों में कोई सामान्य तत्व नहीं हैं। तब Xऔर स्वयंसिद्ध T2 कोT संतुष्ट करें ।

आपका आउटपुट में से एक है T2, T1, T0या TSपर उपरोक्त शर्तों के जो (रखती है निर्भर करता है, TSइसका मतलब है उनमें से कोई भी करते हैं)। ध्यान दें कि T2 T1 से अधिक मजबूत है, जो T0 से अधिक मजबूत है, और आपको हमेशा सबसे मजबूत संभव स्वयंसिद्ध का उत्पादन करना चाहिए।

नियम और स्कोरिंग

आप एक पूर्ण कार्यक्रम या एक फ़ंक्शन लिख सकते हैं। सबसे कम बाइट गिनती जीतता है, और मानक खामियों को रोक दिया जाता है।

परीक्षण के मामलों

2 [] -> TS
2 [[],[1]] -> T0
2 [[0],[1]] -> T2
3 [[0],[0,1,2],[1,2]] -> TS
3 [[],[0],[0,1],[2]] -> T0
3 [[0],[0,1],[2,1],[0,1,2]] -> T0
3 [[0],[0,1],[2,1],[2,0]] -> T1
6 [[0,2,4],[0,3,5],[1,2],[3,4,5]] -> TS
6 [[0,2,4],[0,3,5],[1,2],[2,5],[3,4,5]] -> T0
6 [[0,2,4],[0,3,5],[1,2],[2,5],[3,1],[3,4,5]] -> T1
6 [[0,1],[0,2,3],[1,4],[2,4],[2,3,5],[1,3],[4,5]] -> T2

क्या इनपुट शानदार है n? बाकी की चुनौती में, मैं यह नहीं देख पा रहा हूं कि यह निर्धारित करने से परे उपयोग किया जाता है कि कौन से तत्व अंदर हो सकते हैं T, तो क्या यह सिर्फ एक प्रदान किया गया शॉर्टकट है T.Maximum()?
AdmBorkBork

@ टिम्मीड, नहीं। पहला परीक्षण मामला देखें। 0 []देना चाहिए T2
पीटर टेलर

@PeterTaylor Aaaahhhhhhhhhh धन्यवाद, जो काफी मदद करता है।
AdmBorkBork

अलग होने का क्या अर्थ है!
लुइस मेंडो

@LuisMendo अजीब शब्दावली चेतावनी: ये पृथक्करण स्वयंसिद्ध हैं, और एक टोपोलॉजिकल रिक्त स्थान जो T2 को संतुष्ट करता है, कभी-कभी अलग कहा जाता है, लेकिन पृथक्करण पूरी तरह से कुछ और है।
डेनिस

जवाबों:


9

हास्केल, 317 209 174 168 बाइट्स

फंक्शन f काम करता है।

(#)=elem
x?y=[1|a<-x,b<-y,not$any(#a)b]
f n l|t(++)="TS"|t zip="T0"|t(?)="T1"|1>0="T2"where
    t p=any null[p(x%y)(y%x)|x<-[0..n-1],y<-[0..x-1]]
    x%y=[z|z<-l,x#z,not$y#z]

परीक्षण:

main=do
    putStrLn $ f 2 []
    putStrLn $ f 2 [[],[1]]
    putStrLn $ f 2 [[0],[1]]
    putStrLn $ f 3 [[0],[0,1,2],[1,2]]
    putStrLn $ f 3 [[],[0],[0,1],[2]]
    putStrLn $ f 3 [[0],[0,1],[2,1],[0,1,2]]
    putStrLn $ f 3 [[0],[0,1],[2,1],[2,0]]
    putStrLn $ f 6 [[0,2,4],[0,3,5],[1,2],[3,4,5]]
    putStrLn $ f 6 [[0,2,4],[0,3,5],[1,2],[2,5],[3,4,5]]
    putStrLn $ f 6 [[0,2,4],[0,3,5],[1,2],[2,5],[3,1],[3,4,5]]
    putStrLn $ f 6 [[0,1],[0,2,3],[1,4],[2,4],[2,3,5],[1,3],[4,5]]

उत्पादन:

TS
T0
T2
TS
T0
T0
T1
TS
T0
T1
T2

tएक फ़ंक्शन को इनपुट के रूप में देना एक चतुर चाल है!
जर्गर्ब

प्रतियोगिता के अभाव में, यह इनाम आपके जवाब पर जाता है। बधाई हो!
जर्गर्ब

कुछ मुफ्त बाइट्स - fएक ऑपरेटर नाम से प्रतिस्थापित करते हैं, और इसके p(x%y)(x%y)द्वारा प्रतिस्थापित करते हैं p(x%y)$x%y। और वैसे, अच्छा काम!
गर्वित हैकेलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.