Finden Sie die ungeraden Gewinnchancen


14

Bei einer ungeordneten Auflistung positiver Ganzzahlen mit einer vernünftigen Eingabemethode geben Sie alle Untersammlungen zurück, die eine ungerade Anzahl ungerader Elemente (dh eine ungerade Summe) aufweisen.

Dies ist daher sollten Sie darauf abzielen, die Byte-Anzahl Ihres Programms zu minimieren.

Da einige Sprachen nur geordnete Sammlungen (Listen, Arrays, Vektoren usw.) oder keine ungeordnete Sammlung haben, die Duplikate zulässt, können Sie geordnete Sammlungen verwenden (unabhängig von Ihrer Sprachauswahl). Sie sollten jedoch keine doppelten Sammlungen ausgeben mit verschiedenen Aufträgen (zB [2,3]und [3,2]). Sie können in beliebiger Reihenfolge ausgeben.

Testfälle

[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
Sind doppelte Untersammlungen erlaubt? Wie in, für [2, 2, 3], können wir zurückkommen [[2, 2, 3], [2, 3], [2, 3]]?
HyperNeutrino

1
Hinweis: Die Summe eines solchen Satzes kann nur ungerade sein. Jede andere Variante dieser Mengen kann nur eine gerade Summe haben.
Tuskiomi

@HyperNeutrino Nein, du solltest jedes Mal nur einmal zurückkehren
Post Rock Garf Hunter

Okay. Müssen die Untersammlungen aufsteigend sortiert sein, oder ist es in Ordnung, sie in der Reihenfolge aufzulisten, die im ursprünglichen Array angegeben ist?
HyperNeutrino

@HyperNeutrino Sie können in beliebiger Reihenfolge vorliegen (im Idealfall handelt es sich um eine ungeordnete Sammlung, aber viele Sprachen haben kein derartiges Konstrukt, sodass geordnete Sammlungen in Ordnung sind, solange die Reihenfolge nicht wichtig ist)
Post Rock Garf Hunter

Antworten:




3

Pyth , 10 9 8 Bytes

{f%sT2yS

Probieren Sie es 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%sT2yspeichert ein Byte, wie es scheint.
Erik der Outgolfer

3

Python 2 , 91 Bytes

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

Druckt eine Reihe von Tupeln. Wenn eine Menge von Strings erlaubt ist, tuple(sorted(y))kann ersetzt werden durch `sorted(y)`für 86 Bytes .

Probieren Sie es online!


2

Gelee , 9 Bytes

ṢŒPSḂ$ÐfQ

Probieren Sie es online!

Fehler behoben dank Jonathan Allan.

ṢŒ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 Bytes

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

Um die gleichen Kombinationen in der gleichen Reihenfolge herauszufiltern, filtere ich Duplikate heraus, indem ich sie Bagvor dem Vergleich in eine (ungeordnete Sammlung) umwandle. Leider konnte ich keine Möglichkeit finden, eine so präzise BagEingabe zu akzeptieren .


2

Brachylog , 11 Bytes

o⊇ᵘ{+ḃt1&}ˢ

Probieren Sie es online!

Ich hatte gehofft, eine kürzere Lösung zu finden, aber hier ist das Beste, was ich tun konnte.

Erläuterung

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.

Ja, ich hätte modulo 2 verwenden können, um zu prüfen, ob es merkwürdig ist, aber das ist kein merkwürdiger Ansatz;)


2

Mathematica 31 44 38 Bytes

Unter allen Teilmengen der Eingabemenge werden diejenigen zurückgegeben, für die die Summe Trungerade ist.

Dank Alephalpha werden 6 Bytes gespart.

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


Was ist mit dem Raum?
CalculatorFeline

1
Leider ist dies die Spezifikation nicht erfüllen, wie {2,3}und {3,2}nicht beide zurückgegeben werden soll ( das gleiche mit {2,7}und {7,2}).
Greg Martin

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

1

PHP, 126 Bytes

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

Nimmt Eingaben von Befehlszeilenargumenten entgegen. Laufen Sie mit -nroder versuchen Sie es online .

Nervenzusammenbruch

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.