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

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:




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

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!


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

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.


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


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.