找出赔率


14

通过任何合理的输入方法,如果给定无序的正整数集合,则返回所有具有奇数个奇数元素(即总数为奇数)的子集合。

这是因此您应努力减少程序的字节数。

由于某些语言仅具有有序集合(列表,数组,向量等),或者没有允许重复的无序集合,因此您可以使用有序集合(无论您选择哪种语言),但是不应输出任何重复的集合具有不同的顺序(例如[2,3][3,2])。您可以按照自己认为合适的顺序输出。

测试用例

[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
是否允许重复的子集合?因为,[2, 2, 3]我们可以返回[[2, 2, 3], [2, 3], [2, 3]]吗?
HyperNeutrino

1
提示:这样的集合的总和只能是奇数。这些集的任何其他变体只能具有偶数和。
tuskiomi

@HyperNeutrino不,您每个人只能返回一次
发布Rock Garf Hunter

好的。子集合需要按升序排列还是可以按照原始数组中提供的顺序列出子集?
HyperNeutrino

@HyperNeutrino它们可以以任何顺序排列(理想情况下,它们将是无序集合,但是许多语言没有这种构造,因此只要顺序不重要,有序集合就可以了)
Post Rock Garf Hunter

Answers:





3

Python 2,91字节

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

打印一组元组。如果允许使用一组字符串,tuple(sorted(y))则可以替换`sorted(y)`86个字节

在线尝试!


2

果冻,9字节

ṢŒPSḂ$ÐfQ

在线尝试!

错误修复,感谢乔纳森·艾伦。

ṢŒ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个字节

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

为了滤除相同顺序的组合,我通过Bag在比较之前将它们转换为一个(无序集合)来滤除重复项。不幸的是,我找不到一种Bag简洁的输入方法。


2

Brachylog,11个字节

o⊇ᵘ{+ḃt1&}ˢ

在线尝试!

我希望找到一个更短的解决方案,但这是我能做的最好的。

说明

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.

是的,我本可以使用模2来检查奇数,但这不是奇怪的方法;)


2

Mathematica 31 44 38字节

在输入集的所有子集中,它返回总和Tr为奇数的那些。

感谢alephalpha,节省了6个字节。

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}}


空间是什么?
CalculatorFeline

1
不幸的是,这不符合规范,因为{2,3}并且{3,2}不应同时返回(与{2,7}和相同{7,2})。
格雷格·马丁

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

1

PHP,126字节

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

从命令行参数获取输入;运行-nr在线尝试

分解

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.