अजीब बाधाओं का पता लगाएं


14

किसी भी उचित इनपुट विधि द्वारा धनात्मक पूर्णांक के एक अनियोजित संग्रह को देखते हुए, सभी उप-संग्रह लौटाएं जिनमें विषम संख्या में विषम तत्व हैं (अर्थात एक विषम कुल)।

यह इसलिए आपको अपने कार्यक्रम की बाइट संख्या को कम करने का लक्ष्य रखना चाहिए।

चूँकि कुछ भाषाओं ने केवल संग्रह (सूचियाँ, सरणियाँ, वैक्टर इत्यादि) का आदेश दिया है या एक अनियंत्रित संग्रह नहीं है जो डुप्लिकेट की अनुमति देता है, आप ऑर्डर किए गए संग्रह (अपनी भाषा के विकल्प की परवाह किए बिना) का उपयोग कर सकते हैं, हालाँकि आपको किसी भी डुप्लिकेट संग्रह का उत्पादन नहीं करना चाहिए विभिन्न आदेशों (जैसे ) [2,3]और के साथ [3,2]। आप जिस भी क्रम में फिट दिखते हैं, उसमें आउटपुट कर सकते हैं।

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

[2,3,7,2] -> [[3],[7],[2,3],[2,7],[2,2,3],[2,2,7]]
[2,4,6,8] -> []
[4,9]     -> [[9],[4,9]]

2
क्या डुप्लीकेट सबकोलेक्शन की अनुमति है? के रूप में, के लिए [2, 2, 3], हम लौट सकते हैं [[2, 2, 3], [2, 3], [2, 3]]?
हाइपरएन्यूट्रीनो

1
संकेत: इस तरह के एक सेट का योग केवल विषम हो सकता है। इन सेटों के किसी भी अन्य संस्करण में केवल एक सम राशि हो सकती है।
tuskiomi

@ हैपरनेट्रिनो नहीं, आपको केवल एक बार एक-एक बार लौटाना चाहिए
पोस्ट रॉक गार्फ हंटर

ठीक है। क्या सबकोलिक्शन को आरोही क्रम में होना चाहिए या मूल सरणी में प्रदान किए गए क्रम में उन्हें सूचीबद्ध करना ठीक है?
हाइपरएनुट्रिनो

@HyperNeutrino वे किसी भी क्रम में हो सकते हैं, (आदर्श रूप से वे एक अनियंत्रित संग्रह होंगे, लेकिन कई भाषाओं में ऐसा कोई निर्माण नहीं होता है ताकि आदेश दिए गए संग्रह तब तक ठीक
रहें

जवाबों:


5

05AB1E , 6 बाइट्स

{æÙʒOÉ

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

{æÙʒOÉ
{      Sort
 æ     Powerset
  Ù    Uniqufy
   ʒ   Keep elements where
    O                      the sum
     É                             is uneven

-2 बाइट्स @EriktheOutgolfer की बदौलत


@WheatWizard हाँ (जोनाथन के लिए टिप्पणी का जवाब)। मुझे याद दिलाने के लिये धन्यवाद।
हाइपरएन्यूट्रीनो

2%को निकाला जा सकता है Éऔर }हटाया जा सकता है। लेकिन आपके जवाब से लगता है कि यह मुद्दा है।
एग्रीकल्चर से एरिक

4

पायथन 3 , 93 बाइट्स

f=lambda x,r=[[]]:x and f(x[1:],r+[y+x[:1]for y in r])or{(*sorted(y),)for y in r if sum(y)&1}

टुपल्स का एक सेट लौटाता है। सबसे अधिक संभावना रास्ता बहुत लंबा है।

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


अपनी उपस्थिति के बावजूद यह वास्तव में बहुत अच्छा है। यहां संदर्भ के लिए मेरा शौकिया प्रयास है
पोस्ट रॉक गार्फ हंटर



2

पर्ल 6 , 50 बाइट्स

{.combinations.grep(*.sum!%%2).unique(:as(*.Bag))}

तुलना करने से पहले समान-अप-टू-ऑर्डर संयोजनों को फ़िल्टर करने के लिए मैं डुप्लिकेट को फ़िल्टर करके प्रत्येक Bag(अनऑर्डिनेट किए गए संग्रह) में परिवर्तित करता हूं । दुर्भाग्य से मुझे एक Bagइनपुट के रूप में स्वीकार करने का कोई तरीका नहीं मिला जो संक्षिप्त था।


2

ब्रेकीलॉग , 11 बाइट्स

o⊇ᵘ{+ḃt1&}ˢ

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

मुझे एक छोटा समाधान मिलने की उम्मीद थी, लेकिन यहां सबसे अच्छा मैं कर सकता था।

व्याख्या

o⊇ᵘ{+ḃt1&}ˢ    
o                                        the input, sorted
 ⊇ᵘ           Find all unique subsets of

   {    &}ˢ   Then select only those results where
    +                                          the sum
     ḃ                           the base 2 of
      t        The last digit of
       1                                               is 1.

हाँ, मैं विषमता की जाँच करने के लिए modulo 2 का उपयोग कर सकता था, लेकिन यह एक विषम दृष्टिकोण नहीं है;)


2

गणितज्ञ 31 44 38 बाइट्स

इनपुट सेट के सभी सबसेट के बीच, यह उन लोगों को लौटाता है जिनके लिए राशि, Trविषम है।

एलेफाल्फा की बदौलत 6 बाइट बच गईं।

Select[Union@Subsets@Sort@#,OddQ@*Tr]&

 Select[Union@Subsets@Sort@#,OddQ@*Tr]&[{2,3,7,2}]

{{3}, {7}, {2, 3}, {2, 7}, {2, 2, 3}, {2, 2, 7}}


अंतरिक्ष के साथ क्या है?
कैलक्यूलेटरफलाइन

1
दुर्भाग्य से, यह कल्पना को पूरा नहीं करता है, जैसा कि {2,3}और {3,2}दोनों को वापस नहीं किया जाना चाहिए (उसी के साथ {2,7}और {7,2})।
ग्रेग मार्टिन

Select[Union@Subsets@Sort@#,OddQ@*Tr]&
एलेफाल्फा


1

PHP, 126 बाइट्स

for(;++$i>>$argc<1;sort($t),$s&1?$r[join(_,$t)]=$t:0)for ($t=[],$j=$s=0;++$j<$argc;)$i>>$j&1?$s+=$t[]=$argv[$j]:0;print_r($r);

कमांड लाइन तर्कों से इनपुट लेता है; इसे ऑनलाइन चलाएं -nrया प्रयास करें

टूट - फूट

for(;++$i>>$argc<1;             # loop through subsets
    sort($t),                       # 2. sort subset
    $s&1?$r[join(_,$t)]=$t:0        # 3. if sum is odd, add subset to results
    )                               # 1. create subset:
    for ($t=[],$j=$s=0;++$j<$argc;)     # loop through elements
        $i>>$j&1?                       # if bit $j is set in $i
        $s+=$t[]=$argv[$j]:0;           # then add element to subset
print_r($r);                    # print results
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.