Temukan peluang Ganjil

14

Diberikan koleksi bilangan bulat positif tanpa urutan dengan metode input apa pun yang masuk akal, kembalikan semua sub-koleksi yang memiliki jumlah ganjil elemen ganjil (yaitu memiliki total ganjil).

Ini adalah sehingga Anda harus meminimalkan jumlah byte program Anda.

Karena beberapa bahasa hanya memiliki koleksi yang dipesan (daftar, array, vektor, dll.) Atau tidak memiliki koleksi yang tidak berurutan yang memungkinkan duplikat, Anda dapat menggunakan koleksi yang dipesan (terlepas dari pilihan bahasa Anda), namun Anda tidak boleh mengeluarkan koleksi duplikat apa pun dengan pesanan berbeda (mis. [2,3]dan [3,2]). Anda dapat menampilkan dalam urutan apa pun yang Anda inginkan.

Uji kasus

[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]]
Posting Rock Garf Hunter
sumber
2
Apakah subkoleksi rangkap diperbolehkan? Seperti dalam, untuk [2, 2, 3], bisakah kita kembali [[2, 2, 3], [2, 3], [2, 3]]?
HyperNeutrino
1
Petunjuk: jumlah set seperti itu hanya bisa aneh. Varian lain dari set ini hanya dapat memiliki jumlah genap.
tuskiomi
@HyperNeutrino Tidak, Anda hanya boleh mengembalikan masing-masing satu kali
Post Rock Garf Hunter
Baik. Apakah subkoleksi harus dalam urutan menaik atau tidak apa-apa untuk daftar mereka dalam urutan yang disediakan dalam array asli?
HyperNeutrino
@HyperNeutrino Mereka mungkin berurutan, (idealnya mereka adalah koleksi yang tidak berurutan, tetapi banyak bahasa tidak memiliki konstruksi seperti itu sehingga koleksi yang dipesan baik-baik saja selama urutannya tidak penting)
Post Rock Garf Hunter

Jawaban:

5

05AB1E , 6 byte

{æÙʒOÉ

Cobalah online!

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

-2 byte terima kasih kepada @EriktheOutgolfer

HyperNeutrino
sumber
@WheatWizard Ya (balas komentar ke Jonathan). Terima kasih sudah mengingatkan saya.
HyperNeutrino
2%dapat dipindah ke Édan }dapat dihapus. Tetapi jawaban Anda tampaknya memiliki masalah.
Erik the Outgolfer
4

Python 3 , 93 byte

f=lambda x,r=[[]]:x and f(x[1:],r+[y+x[:1]for y in r])or{(*sorted(y),)for y in r if sum(y)&1}

Mengembalikan satu set tupel. Kemungkinan besar terlalu lama.

Cobalah online!

Dennis
sumber
Meskipun penampilannya ini sebenarnya cukup bagus. Inilah upaya amatir saya untuk referensi
Posting Rock Garf Hunter
3

Pyth , 10 9 8 byte

{f%sT2yS

Cobalah 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
tongkat
sumber
1
{SMf%sT2ymenghemat byte sepertinya.
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}

Mencetak satu set tupel. Jika satu set string diizinkan, tuple(sorted(y))dapat diganti dengan `sorted(y)`untuk 86 byte .

Cobalah online!

Dennis
sumber
2

Jelly , 9 byte

ṢŒPSḂ$ÐfQ

Cobalah online!

Bug diperbaiki berkat 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
sumber
2

Perl 6 , 50 byte

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

Untuk memfilter kombinasi yang sama-dengan-pemesanan, saya memfilter duplikat dengan mengonversi masing-masing ke Bag(koleksi tidak berurutan) sebelum membandingkan. Sayangnya saya tidak dapat menemukan cara untuk menerima Baginput yang singkat.

Sean
sumber
2

Brachylog , 11 byte

o⊇ᵘ{+ḃt1&}ˢ

Cobalah online!

Saya berharap menemukan solusi yang lebih pendek, tetapi inilah yang terbaik yang bisa saya lakukan.

Penjelasan

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.

Ya, saya bisa menggunakan modulo 2 untuk memeriksa keanehan, tapi itu bukan pendekatan yang aneh;)

Leo
sumber
2

Mathematica 31 44 38 bytes

Di antara semua himpunan bagian dari himpunan input, itu mengembalikan mereka yang jumlahnya, Tr aneh.

6 byte disimpan berkat 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
sumber
Ada apa dengan ruangnya?
CalculatorFeline
1
Sayangnya, ini tidak memenuhi spesifikasi, karena {2,3}dan {3,2}seharusnya tidak dikembalikan (sama dengan {2,7}dan {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);

mengambil input dari argumen baris perintah; jalankan dengan -nratau coba online .

kerusakan

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
sumber