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]]
Post Rock Garf Hunter
quelle
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:

5

05AB1E , 6 Bytes

{æÙʒOÉ

Probieren Sie es online!

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

-2 Bytes dank @EriktheOutgolfer

HyperNeutrino
quelle
@ WheatWizard Ja (Kommentarantwort an Jonathan). Danke, dass du mich erinnert hast.
HyperNeutrino
2%kann golfen Éund }entfernt werden. Aber Ihre Antwort scheint das Problem zu haben.
Erik der Outgolfer
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
Stange
quelle
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!

Dennis
quelle
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
HyperNeutrino
quelle
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 .

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

Löwe
quelle
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}}

DavidC
quelle
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
Titus
quelle