Znajdź kursy nieparzyste

14

Biorąc pod uwagę nieuporządkowany zbiór dodatnich liczb całkowitych dowolną rozsądną metodą wprowadzania, zwróć wszystkie podkolekcje, które mają nieparzystą liczbę nieparzystych elementów (tj. Mają nieparzystą sumę).

To jest więc powinieneś dążyć do zminimalizowania liczby bajtów twojego programu.

Ponieważ niektóre języki mają tylko uporządkowane kolekcje (listy, tablice, wektory itp.) Lub nie mają nieuporządkowanej kolekcji, która umożliwia duplikaty, możesz używać uporządkowanych kolekcji (niezależnie od wybranego języka), jednak nie powinieneś generować żadnych duplikatów kolekcji z różnymi zamówieniami (np. [2,3]i [3,2]). Możesz generować dane w dowolnej kolejności.

Przypadki testowe

[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]]
Post Rock Garf Hunter
źródło
2
Czy dozwolone są duplikaty podkolekcji? Jak w, bo [2, 2, 3]czy możemy wrócić [[2, 2, 3], [2, 3], [2, 3]]?
HyperNeutrino
1
Wskazówka: suma takiego zestawu może być nieparzysta. Każdy inny wariant tych zestawów może mieć tylko parzystą sumę.
tuskiomi
@HyperNeutrino Nie, powinieneś powracać tylko raz
Post Rock Garf Hunter
W porządku. Czy podkolekcje muszą być w porządku rosnącym, czy dobrze jest wypisać je w kolejności podanej w oryginalnej tablicy?
HyperNeutrino
@HyperNeutrino Mogą być w dowolnej kolejności (najlepiej byłoby to nieuporządkowana kolekcja, ale wiele języków nie ma takiej konstrukcji, więc uporządkowane kolekcje są w porządku, o ile kolejność nie jest ważna)
Post Rock Garf Hunter

Odpowiedzi:

5

05AB1E , 6 bajtów

{æÙʒOÉ

Wypróbuj online!

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

-2 bajty dzięki @EriktheOutgolfer

HyperNeutrino
źródło
@WheatWizard Tak (komentarz do Jonathana). Dzięki za przypomnienie.
HyperNeutrino
2%można grać w golfa Éi }można go usunąć. Ale twoja odpowiedź wydaje się mieć problem.
Erik the Outgolfer
4

Python 3 , 93 bajty

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}

Zwraca zestaw krotek. Najprawdopodobniej zdecydowanie za długo.

Wypróbuj online!

Dennis
źródło
Mimo swojego wyglądu jest to całkiem niezłe. Oto moja amatorska próba odniesienia
Post Rock Garf Hunter
3

Pyth , 10 9 8 bajtów

{f%sT2yS

Wypróbuj online!

         # implicit input
       S # sort input, this way the subsets will already be sorted
      y  # all subsets
 f       # filter elements when ..
   sT    # the sum ..
  %  2   # is odd
{        # remove all duplicated elements
         # implicit output
Pręt
źródło
1
{SMf%sT2ywydaje się, że zapisuje bajt.
Erik the Outgolfer
3

Python 2 , 91 bajtów

r=[[]]
for n in input():r+=map([n].__add__,r)
print{tuple(sorted(y))for y in r if sum(y)&1}

Drukuje zestaw krotek. Jeśli zestaw strun jest dozwolone, tuple(sorted(y))mogą być zastąpione `sorted(y)`przez 86 bajtów .

Wypróbuj online!

Dennis
źródło
2

Galaretka , 9 bajtów

ṢŒPSḂ$ÐfQ

Wypróbuj online!

Naprawiono błąd dzięki Jonathanowi Allanowi.

ṢŒPSḂ$ÐfQ  Main Link
Ṣ          Sort
 ŒP        Powerset
      Ðf   Filter to keep elements where                         is truthy
    Ḃ                                    the last bit of
   S                                                     the sum
        Q  Only keep unique elements
HyperNeutrino
źródło
2

Perl 6 , 50 bajtów

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

Aby odfiltrować te same kombinacje uporządkowania, odfiltrowuję duplikaty, konwertując je na Bag(kolekcję nieuporządkowaną) przed porównaniem. Niestety nie mogłem znaleźć sposobu na zaakceptowanie Bagtak zwięzłego wkładu.

Sean
źródło
2

Brachylog , 11 bajtów

o⊇ᵘ{+ḃt1&}ˢ

Wypróbuj online!

Miałem nadzieję znaleźć krótsze rozwiązanie, ale oto najlepsze, co mogłem zrobić.

Wyjaśnienie

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.

Tak, mogłem użyć modulo 2, aby sprawdzić dziwność, ale to nie jest dziwne podejście;)

Lew
źródło
2

Mathematica 31 44 38 bajtów

Spośród wszystkich podzbiorów zestawu wejściowego zwraca te, dla których suma Trjest nieparzysta.

6 bajtów zaoszczędzonych dzięki alephalpha.

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}}

DavidC
źródło
Co jest z przestrzenią?
CalculatorFeline
1
Niestety, ten nie spełnia specyfikację, jak {2,3}i {3,2}nie powinny być zwrócone zarówno (samo {2,7}a {7,2}).
Greg Martin
Select[Union@Subsets@Sort@#,OddQ@*Tr]&
alephalpha
1

PHP, 126 bajtów

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);

pobiera dane wejściowe z argumentów wiersza poleceń; uruchom -nrlub wypróbuj online .

awaria

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
Tytus
źródło