Trova le probabilità dispari


14

Data una raccolta non ordinata di numeri interi positivi con qualsiasi metodo di input ragionevole, restituisce tutte le sotto-raccolte che hanno un numero dispari di elementi dispari (cioè hanno un totale dispari).

Questo è quindi dovresti mirare a minimizzare il conteggio dei byte del tuo programma.

Poiché alcune lingue hanno solo raccolte ordinate (elenchi, matrici, vettori, ecc.) O non hanno una raccolta non ordinata che consente duplicati, è possibile utilizzare raccolte ordinate (indipendentemente dalla scelta della lingua), tuttavia non è necessario generare raccolte duplicate con ordini diversi (ad es. [2,3]e [3,2]). È possibile produrre in qualunque ordine si ritenga opportuno.

Casi test

[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
Sono consentite raccolte secondarie duplicate? Come in, per [2, 2, 3], possiamo tornare [[2, 2, 3], [2, 3], [2, 3]]?
HyperNeutrino,

1
Suggerimento: la somma di un tale set può essere solo dispari. Qualsiasi altra variante di questi set può avere solo una somma pari.
tuskiomi,

@HyperNeutrino No, dovresti restituirli una sola volta
Post Rock Garf Hunter,

Va bene. Le raccolte secondarie devono essere in ordine crescente o è corretto elencarle nell'ordine fornito nell'array originale?
HyperNeutrino,

@HyperNeutrino Potrebbero essere in qualsiasi ordine (idealmente sarebbero una collezione non ordinata, ma molte lingue non hanno un tale costrutto quindi le raccolte ordinate vanno bene finché l'ordine non è importante)
Post Rock Garf Hunter

Risposte:


5

05AB1E , 6 byte

{æÙʒOÉ

Provalo online!

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

-2 byte grazie a @EriktheOutgolfer


@WheatWizard Sì (commento risposta a Jonathan). Grazie per avermi ricordato.
HyperNeutrino,

2%può essere giocato a golf Ée }può essere rimosso. Ma la tua risposta sembra avere il problema.
Erik the Outgolfer,


3

Pyth , 10 9 8 byte

{f%sT2yS

Provalo 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%sT2ysembra salvare un byte.
Erik the Outgolfer,

3

Python 2 , 91 byte

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

Stampa una serie di tuple. Se è consentito un set di stringhe, tuple(sorted(y))può essere sostituito con `sorted(y)`per 86 byte .

Provalo online!


2

Gelatina , 9 byte

ṢŒPSḂ$ÐfQ

Provalo online!

Bug risolto grazie a 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 byte

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

Per filtrare le combinazioni uguali fino all'ordine, filtrare i duplicati convertendoli in una Bag(raccolta non ordinata) prima del confronto. Sfortunatamente non sono riuscito a trovare un modo per accettare un Baginput così conciso.


2

Brachylog , 11 byte

o⊇ᵘ{+ḃt1&}ˢ

Provalo online!

Speravo di trovare una soluzione più breve, ma ecco il meglio che potrei fare.

Spiegazione

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.

Sì, avrei potuto usare il modulo 2 per verificare la stranezza, ma questo non è un approccio strano;)


2

Mathematica 31 44 38 byte

Tra tutti i sottoinsiemi del set di input, restituisce quelli per i quali la somma Trè dispari.

6 byte salvati grazie ad 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}}


Cosa c'è nello spazio?
CalculatorFeline

1
Sfortunatamente, questo non soddisfa le specifiche, in quanto {2,3}e {3,2}non dovrebbero essere entrambi restituiti (lo stesso con {2,7}e {7,2}).
Greg Martin,

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

1

PHP, 126 byte

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

accetta input dagli argomenti della riga di comando; corri con -nro provalo online .

abbattersi

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.