Encontre as probabilidades ímpares

14

Dada uma coleção não ordenada de números inteiros positivos por qualquer método de entrada razoável, retorne todas as sub-coleções que possuem um número ímpar de elementos ímpares (ou seja, possuem um total ímpar).

Isso é então você deve tentar minimizar a contagem de bytes do seu programa.

Como alguns idiomas possuem apenas coleções ordenadas (listas, matrizes, vetores etc.) ou não possuem uma coleção não ordenada que permita duplicatas, você pode usar coleções ordenadas (independentemente da sua escolha de idioma); no entanto, você não deve produzir coleções duplicadas. com ordens diferentes (por exemplo, [2,3]e [3,2]). Você pode imprimir na ordem que desejar.

Casos de teste

[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
fonte
2
Subcoleções duplicadas são permitidas? Como em, para [2, 2, 3], podemos voltar [[2, 2, 3], [2, 3], [2, 3]]?
HyperNeutrino
1
Dica: a soma desse conjunto só pode ser ímpar. Qualquer outra variante desses conjuntos pode ter apenas uma soma uniforme.
Tuskiomi # 26/17
@HyperNeutrino Não, você só deve retornar cada um uma vez
post rock Garf Hunter
OK. As sub-coleções precisam estar em ordem crescente ou é bom listá-las na ordem fornecida na matriz original?
HyperNeutrino
@HyperNeutrino Eles podem estar em qualquer ordem (idealmente, eles seriam uma coleção não ordenada, mas muitos idiomas não têm essa construção, portanto as coleções ordenadas são boas desde que a ordem não seja importante)
Post Rock Garf Hunter

Respostas:

5

05AB1E , 6 bytes

{æÙʒOÉ

Experimente online!

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

-2 bytes graças a @EriktheOutgolfer

HyperNeutrino
fonte
@WheatWizard Sim (resposta do comentário a Jonathan). Obrigado por me lembrar.
HyperNeutrino
2%pode ser jogado golfe Ée }pode ser removido. Mas sua resposta parece ter o problema.
Erik the Outgolfer
3

Pitão , 10 9 8 bytes

{f%sT2yS

Experimente 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
Cajado
fonte
1
{SMf%sT2ysalva um byte que parece.
Erik the 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}

Imprime um conjunto de tuplas. Se um conjunto de cadeias de caracteres for permitido, tuple(sorted(y))poderá ser substituído `sorted(y)`por 86 bytes .

Experimente online!

Dennis
fonte
2

Geléia , 9 bytes

ṢŒPSḂ$ÐfQ

Experimente online!

Bug corrigido graças 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
HyperNeutrino
fonte
2

Perl 6 , 50 bytes

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

Para filtrar as combinações de mesma ordem, eu filtrei duplicatas convertendo cada uma em uma Bag(coleção não ordenada) antes de comparar. Infelizmente, não consegui encontrar uma maneira de aceitar uma Bagentrada tão concisa.

Sean
fonte
2

Braquilog , 11 bytes

o⊇ᵘ{+ḃt1&}ˢ

Experimente online!

Eu esperava encontrar uma solução mais curta, mas aqui está o melhor que eu poderia fazer.

Explicação

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.

Sim, eu poderia ter usado o módulo 2 para verificar a estranheza, mas essa não é uma abordagem estranha;)

Leo
fonte
2

Mathematica 31 44 38 bytes

Entre todos os subconjuntos do conjunto de entrada, ele retorna aqueles para os quais a soma Tr, é ímpar.

6 bytes salvos graças ao 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
fonte
O que há com o espaço?
CalculatorFeline
1
Infelizmente, este não satisfazer as especificações, como {2,3}e {3,2}não deve tanto ser devolvidos (o mesmo com {2,7}e {7,2}).
Greg Martin
Select[Union@Subsets@Sort@#,OddQ@*Tr]&
Alephalpha # 27/17
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);

recebe entrada de argumentos de linha de comando; correr com -nrou experimentar online .

demolir

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
fonte