奇数オッズを見つける


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]]ますか?
ハイパーニュートリノ

1
ヒント:そのようなセットの合計は奇数にしかなれません。これらのセットの他のバリアントは、偶数の合計しか持つことができません。
-tuskiomi

@HyperNeutrinoいいえ、それぞれを1回だけ返す必要があります
ポストロックガーフハンター

はい。サブコレクションは昇順である必要がありますか、それとも元の配列で提供された順序でリストするのは問題ありませんか?
ハイパーニュートリノ

@HyperNeutrinoそれらは任意の順序である可能性があります(理想的には順序付けられていないコレクションですが、多くの言語にはそのような構造がないため、順序が重要でない限り順序付けられたコレクションは問題ありません)
Post Rock Garf Hunter

回答:


5

05AB1E、6バイト

{æÙʒOÉ

オンラインでお試しください!

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

@EriktheOutgolferのおかげで-2バイト


@WheatWizardはい(ジョナサンへのコメント返信)。思い出させてくれてありがとう。
ハイパーニュートリノ

2%golfedすることができますÉし、}削除することができます。しかし、あなたの答えには問題があるようです。
エリックアウトゴルファー



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

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]&
アレフアルファ

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.