Tìm tỷ lệ cược lẻ


14

Cho một tập hợp các số nguyên dương không có thứ tự theo bất kỳ phương thức nhập hợp lý nào, trả về tất cả các tập hợp con có số phần tử lẻ lẻ (nghĩa là có tổng số lẻ).

Đây là vì vậy bạn nên cố gắng giảm thiểu số lượng byte của chương trình.

Vì một số ngôn ngữ chỉ có bộ sưu tập theo thứ tự (danh sách, mảng, vectơ, v.v.) hoặc không có bộ sưu tập không có thứ tự cho phép trùng lặp, bạn có thể sử dụng các bộ sưu tập theo thứ tự (bất kể lựa chọn ngôn ngữ của bạn), tuy nhiên bạn không nên xuất bất kỳ bộ sưu tập trùng lặp nào với các đơn đặt hàng khác nhau (ví dụ [2,3][3,2]). Bạn có thể xuất ra theo bất cứ thứ tự nào bạn thấy phù hợp.

Các trường hợp thử nghiệm

[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
Được phép trùng lặp các bộ lọc con? Như trong, cho [2, 2, 3], chúng ta có thể trở lại [[2, 2, 3], [2, 3], [2, 3]]?
HyperNeutrino

1
Gợi ý: tổng của một tập hợp như vậy chỉ có thể là số lẻ. Bất kỳ biến thể khác của các bộ này chỉ có thể có một số tiền chẵn.
tuskiomi

@HyperNeutrino Không, bạn chỉ nên quay lại mỗi người một lần
Post Rock Garf Hunter

Được chứ. Các bộ sưu tập con có cần phải theo thứ tự tăng dần hay không, có nên liệt kê chúng theo thứ tự được cung cấp trong mảng ban đầu không?
HyperNeutrino

@HyperNeutrino Chúng có thể theo bất kỳ thứ tự nào, (lý tưởng chúng sẽ là một bộ sưu tập không có thứ tự, nhưng nhiều ngôn ngữ không có cấu trúc như vậy nên các bộ sưu tập được sắp xếp là tốt miễn là thứ tự không quan trọng)
Post Rock Garf Hunter

Câu trả lời:


5

05AB1E , 6 byte

{æÙʒOÉ

Hãy thử trực tuyến!

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

-2 byte nhờ @EriktheOutgolfer


@WheatWizard Có (bình luận trả lời Jonathan). Cảm ơn vì đã nhắc tôi.
HyperNeutrino

2%có thể được chơi golf É}có thể được gỡ bỏ. Nhưng câu trả lời của bạn dường như có vấn đề.
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}

In một bộ tuples. Nếu một tập hợp các chuỗi được cho phép, tuple(sorted(y))có thể được thay thế bằng `sorted(y)`cho 86 byte .

Hãy thử trực tuyến!



2

Perl 6 , 50 byte

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

Để lọc các kết hợp theo thứ tự tương tự, tôi lọc các bản sao bằng cách chuyển đổi từng kết hợp thành một Bag(bộ sưu tập không có thứ tự) trước khi so sánh. Thật không may, tôi không thể tìm ra cách để chấp nhận một Bagđầu vào là ngắn gọn.


2

Brachylog , 11 byte

o⊇ᵘ{+ḃt1&}ˢ

Hãy thử trực tuyến!

Tôi hy vọng tìm thấy một giải pháp ngắn hơn, nhưng đây là cách tốt nhất tôi có thể làm.

Giải trình

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.

Vâng, tôi đã có thể sử dụng modulo 2 để kiểm tra sự kỳ lạ, nhưng đó không phải là một cách tiếp cận kỳ lạ;)


2

Toán học 31 44 38 byte

Trong số tất cả các tập hợp con của tập hợp đầu vào, nó trả về những tập hợp mà tổng Tr , là số lẻ.

6 byte được lưu nhờ 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}}


Những gì với không gian?
Máy

1
Thật không may, điều này không đáp ứng được thông số kỹ thuật, vì {2,3}{3,2}không nên trả lại cả hai (cùng với {2,7}{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);

lấy đầu vào từ các đối số dòng lệnh; chạy với -nrhoặc thử trực tuyến .

phá vỡ

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.