वेन आरेख कोशिकाएं


12

कई सेट्स, उदाहरण के लिए s1={2,3,7}, s2={1,2,4,7,8}और s3={4,7}, एक वेन आरेख प्रत्येक सेट को एक बंद वक्र और सेट तत्वों द्वारा कल्पना करता है जो कि या तो वक्र की परिधि के अंदर या बाहर हैं, यह इस बात पर निर्भर करता है कि वे सेट के तत्व हैं या नहीं। क्योंकि सभी सेट तत्व केवल एक बार वेन डिग्राम में दिखाई देते हैं, अगर प्रत्येक तत्व एक से अधिक सेट में मौजूद है, तो प्रत्येक सेट का प्रतिनिधित्व करने वाले घटता को ओवरलैप करने की आवश्यकता होती है। हम प्रत्येक ऐसे अतिव्यापी को वेन आरेख के एक सेल कहते हैं ।

यह स्पष्टीकरण थोड़ा भ्रमित करने वाला हो सकता है, तो आइए एक उदाहरण देखें।

उदाहरण

सेट के लिए एक वेन आरेख s1, s2और s3इस तरह दिख सकता है:

इस वेन आरेख की कोशिकाओं (ऊपर से नीचे तक पढ़ा है, बाएं से दाएं) कर रहे हैं {1,8}, {2}, {7}, {4}, {3}, {}और {}

व्यवहार में, आमतौर पर दो या तीन सेटों के केवल वेन आरेख का सामना होता है, क्योंकि चार या अधिक सेटों के वेन आरेखों का प्रतिनिधित्व बहुत स्पष्ट नहीं है। हालाँकि वे मौजूद हैं, उदाहरण के लिए छह सेट:

CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=1472309

काम

किसी भी उचित प्रतिनिधित्व में सकारात्मक पूर्णांकों के सेट के एक गैर-खाली सेट को देखते हुए, इनपुट सेट 'वेन आरेख की कोशिकाओं के सेट को वापस करें। विशेष रूप से, कोई चित्रमय प्रतिनिधित्व की आवश्यकता नहीं है।

  • आप एक पूर्ण कार्यक्रम या एक समारोह लिख सकते हैं।
  • आप केवल एक खाली सेट (यानी कोशिकाओं का सेट ) के बजाय खाली कोशिकाओं (यानी सभी कोशिकाओं की एक सूची ) के रूप में कई खाली सेट पर लौट सकते हैं ।
  • ऊपर के उदाहरण के लिए इनपुट से कुछ उचित तरीके शामिल हैं, लेकिन तक सीमित नहीं हैं {{2,3,7},{1,2,4,7,8},{4,7}}, [[2,3,7],[1,2,4,7,8],[4,7]], "2,3,7;1,2,4,7,8;4,7"या "2 3 7\n1 2 4 7 8\n4 7"। यदि संदेह है कि क्या आपका चुना इनपुट प्रारूप स्वीकार्य है, तो टिप्पणी में पूछने के लिए स्वतंत्र महसूस करें।
  • यदि संभव हो तो आपका आउटपुट प्रारूप आपके इनपुट प्रारूप से मेल खाना चाहिए। ध्यान दें कि इस नियम के लिए आवश्यक है कि आपका प्रारूप खाली सेट प्रदर्शित करने में सक्षम हो।
  • यह , इसलिए अपनी पसंद की भाषा में यथासंभव कम बाइट्स का उपयोग करने का प्रयास करें। भाषाओं के बीच प्रति भाषा के बजाय प्रतिस्पर्धा को प्रोत्साहित करने के लिए, मैं एक उत्तर स्वीकार नहीं करूंगा।

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

संभावित आउटपुट के साथ यहां कुछ इनपुट दिए गए हैं:

input -> output
{{2,3,7},{1,2,4,7,8},{4,7}} -> {{1,8},{2},{7},{4},{3},{}} (or {{1,8},{2},{7},{4},{3},{},{}})
{{1,2,3},{4,5,6},{7,8,9}} -> {{1,2,3},{4,5,6},{7,8,9},{}}
{{}} -> {{}}
{{1,2,3},{1,2}} -> {{1,2},{3},{}}
{{4,3,8},{1,2,9,3},{14,7,8,5},{6,11,3,8},{10},{9,4,3,7,10}} -> {{6,11},{10},{4},{3},{8},{5,14},{1,2},{9},{7},{}}
{{2,3,4,7},{},{1,3,7,5,6},{2,3,7,5},{7,2,4,3,6},{1,4,5}} -> {{},{4},{2},{7,3},{1},{6},{5}}
{{1,2,3,4},{1,2,5,6},{1,3,5,7}} -> {{4},{3},{2},{1},{6},{5},{7}}

मैं यह मान रहा हूं कि सेट की परिभाषा के कारण यह सही है, लेकिन क्या हम मान सकते हैं कि किसी एक सबसेट के भीतर कोई डुप्लिकेट नहीं होगा?
हाइपरएन्यूट्रीनो

@ हाइपर न्यूट्रिनो हां, आप मान सकते हैं कि सभी सेट डुप्लिकेट फ्री हैं।
लैकोनी

शायद आप एक परीक्षण मामला जोड़ सकते हैं जहां कोई भी कोशिका खाली नहीं है। उदा {{1,2,3,4}, {1,2,5,6}, {1,3,5,7}}।
अर्जन जोहानसन

दूसरा कैसे नहीं देता है {{1,2,3},{4,5,6},{7,8,9},{},{},{},{}}?
लीक नून

1
@carusocomputing करीब निरीक्षण पर आप पाएंगे कि यह एक असली वेन आरेख नहीं है क्योंकि कुछ संभावित ओवरलैपिंग गायब हैं।
लैकोनी

जवाबों:


8

हास्केल , 71 बाइट्स

एक अनाम फ़ंक्शन पूर्णांक की सूची की सूची ले रहा है और एक समान सूची वापस कर रहा है।

के रूप में उपयोग करें (foldr(\x r->(x\\(id=<<r)):([intersect x,(\\x)]<*>r))[])[[1,2,3],[1,2]]

import Data.List
foldr(\x r->(x\\(id=<<r)):([intersect x,(\\x)]<*>r))[]

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

  • सेट-जैसे ऑपरेशन \\(अंतर) और intersectसे का उपयोग करता है Data.List
  • "सूची" (सूचियों के रूप में प्रतिनिधित्व) की सूची को सेल की सूची में खाली सूची के साथ शुरू किया जाता है []
  • xक्या वर्तमान सेट आरेख में जोड़ा जाना है, और rपहले से निर्मित कोशिकाओं की सूची है।
    • x\\(id=<<r)उन तत्वों के सबसेट xजो पहले से निर्मित कोशिकाओं में से किसी में नहीं हैं।
    • [intersect x,(\\x)]<*>rप्रत्येक कोशिका को rउसके तत्वों के अनुसार होने xया न होने के अनुसार विभाजित करता है ।
  • ज्यादातर निश्चित रूप से खाली कोशिकाओं को मर्ज करने का प्रयास नहीं करते हैं, इसलिए आउटपुट में काफी कुछ हैं।

मेरे कार्यान्वयन के रूप में एक ही विचार, लेकिन दो बाइट्स कम। बहुत बढ़िया!
लकोनी

4

जेली , 14 17 बाइट्स

FṀ‘³iþ¬Ḅµ;ṀḶ$ĠṖṖ€

इसे ऑनलाइन आज़माएं!

फ़ंक्शन सबमिशन (क्योंकि प्रारूप में जेली प्रिंट डिफ़ॉल्ट रूप से सूचीबद्ध करता है, गोल-यात्रा नहीं करता है - यह अपने स्वयं के आउटपुट प्रारूप को नहीं पढ़ सकता है - लेकिन एक फ़ंक्शन और उसी प्रारूप में आउटपुट)। TIO लिंक में एक पाद होता है जो फ़ंक्शन को चलाता है और इसके आउटपुट को उसी प्रारूप में प्रिंट करता है जिसमें इनपुट पार्स होता है।

व्याख्या

FṀ‘³iþ¬Ḅµ;ṀḶ$ĠṖṖ€
FṀ‘               Find the largest number that appears in any of the input sets, + 1
   ³ þ            For each number from 1 to that number, and each of the input sets
    i ¬             find whether the number is missing from the set
       Ḅ          Convert the list of missing sets into a single number using binary
         ;        Append
        µ ṀḶ$     all numbers from 0 to the maximum value minus 1
             Ġ    Group indexes by values
              ṖṖ€ Delete the last group and last element of other groups

आवश्यकता है कि हम कम से कम एक खाली सेट का उत्पादन करें यदि सभी वेन आरेख अनुभागों का उपयोग नहीं किया जाता है तो यहां आधे से अधिक कार्यक्रम का प्रबंधन किया जाता है (यह इसके लिए जिम्मेदार है कि हमारे पास गैर-मिलान तत्वों के लिए कम से कम एक समूह है, हमें अनुमति देता है मूल रूप से कितने सेट थे, इस पर नज़र रखने के लिए, स्रोत कोड के अंतिम नौ बाइट्स को छोड़कर Ġ)। मूल तरीका जिसमें हम इसे लागू करते हैं, यह सुनिश्चित करना है कि सभी 2 ^ n वेन आरेख उपसमुच्चय में कम से कम एक प्रविष्टि है, एक डमी प्रविष्टि जोड़कर जो "नो सेट्स" सेक्शन में भर जाएगी और (बाद में) प्रत्येक के लिए एक डमी प्रविष्टि अन्य अनुभाग, फिर Ġप्रत्येक सबसेट के लिए एक समूह का उत्पादन करेगा, जिसे हम उपयोग करके निकाल सकते हैं ṖṖ€


उम में अधिकतम 7 सेट पर कोई प्रतिबंध नहीं है, और परीक्षण मामलों में से एक में अधिक है।
अर्जन जोहान्सन

मैंने माना कि मूल सेट की लंबाई 3 थी, क्योंकि वेन आरेख कैसे काम करते हैं, लेकिन स्पष्ट रूप से नहीं? उस मामले में, शायद मुझे खाली सेट को जोड़ने के लिए एक अलग तरीके की आवश्यकता होती है केवल अगर वेन आरेख के सभी अनुभाग भरे नहीं जाते हैं। यह एक बहुत बुरा सवाल है, अन्यथा एक काफी सुरुचिपूर्ण सवाल पर कुछ बुरा है।

वैसे आप 7 को 2 ^ n-1 से बदल सकते हैं, मैं मानता हूं।
अर्जन जोहान्सन

मुझे 2 ^ n-1 मान प्राप्त करने का एक तरीका मिला जो कल्पना से मेल खाता है, लेकिन यह लंबे समय तक दर्द भरा है। उम्मीद है कि एक छोटा रास्ता है, लेकिन फिर भी, यह सवाल निराशाजनक है।

4

पर्ल 5, 79 बाइट्स

sub{for$.(0..@_){$x{$_}+=2**$.for@{$_[$.]}};push@{$h{$x{$_}}},$_ for keys%x;%h}

जैसे ([2,3,7], [1,2,4,7,8]], [4,7]) अनाम सरणियों की एक सूची के रूप में इनपुट लेता है। आउटपुट हैश है जहाँ कुंजियाँ लेबल हैं और मान आउटपुट सेट के अनुरूप अनाम सरणियाँ हैं।

एक पूर्ण कार्यक्रम के भाग के रूप में:

*x=
sub{for$.(0..@_){$x{$_}+=2**$.for@{$_[$.]}};push@{$h{$x{$_}}},$_ for keys%x;%h};
%x=x([2,3,7],[1,2,4,7,8],[4,7]);
print"Set $_:@{$x{$_}}\n"for keys%x;

स्पष्टीकरण:

, प्रत्येक सेट एक लेबल के रूप में एक पूर्णांक देता है $.। एक हैश बनाता है जो प्रत्येक अद्वितीय तत्व के लिए एक पूर्णांक संग्रहीत करता है $_2**$.प्रत्येक सेट के लिए जोड़ता $_है, जो प्रभावी रूप से एक बाइनरी मैप बनाता है जिसमें दिखाया गया है कि प्रत्येक तत्व किस सेट में दिखाई देता है। अंत में, वेन आरेख के प्रत्येक सेल के लिए एक अनाम सरणी बनाता है और सरणी में संबंधित तत्वों को प्रदर्शित करता है। इसलिए प्रत्येक सरणी का प्रत्येक तत्व एक ही सेट में मौजूद है और इस प्रकार वेन आरेख का एक ही सेल है।


3

अजगर , 11 बाइट्स

m-@Fds-Qdty

परीक्षण सूट।

यह काम किस प्रकार करता है

वेन आरेख का प्रत्येक क्षेत्र उन तत्वों का प्रतिनिधित्व करता है जो [सेट के कुछ संयोजनों] में हैं, लेकिन [अन्य सेटों में] नहीं हैं।

इसलिए, हम इनपुट के पावर सेट को खोजकर (और खाली संयोजनों को हटा दें) सभी संभावित संयोजनों को उत्पन्न करते हैं।

उत्पन्न किए गए प्रत्येक संयोजन के लिए, हम संयोजन में सेटों के प्रतिच्छेदन को पाते हैं, और उन तत्वों को फ़िल्टर करते हैं जो अन्य सेटों में हैं।

m-@Fds-Qdty  input as Q
          y  power set
         t   remove the first one (empty combination)
m            for each combination d:
  @Fd            find the intersection of all the sets in d
 -               filter out those who are in
     s               the union of
      -Qd            the sets not in the combination
                     (input minus combination)

2

जावास्क्रिप्ट (ईएस 6), 123 बाइट्स

a=>a.map((b,i)=>b.map(e=>m[e]|=1<<i),m=[])&&[...Array(1<<a.length)].map((_,i)=>m.map((e,j)=>e==i&&j).filter(j=>j)).slice(1)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.