私の配列はこれに等しいはずですが、そうではありません!


21

n個の整数と単一の整数aを含む整数の配列を指定します。から最小の要素を削除して、合計をに等しくします。の組み合わせが形成できない場合、偽の値を返します。xaaxax

コメントで指摘されているように、これはxの合計を含む最大セットです。大学以来多くの用語を忘れていました。


例(真実):

f([1,2,3,4,5,6,7,8,9,10], 10) = [1,2,3,4]

f([2,2,2,2,2,2,2,2,2], 10) = [2,2,2,2,2]

f([2,2,2,2,-2,-2,-2,-4,-2], -8) = [2,2,-2,-2,-2,-4,-2]

f([-2,-4,-2], -6) = [-4,-2] OR [-2,-4]

f([2,2,2,4,2,-2,-2,-2,-4,-2], 0) = [2,2,2,4,2,-2,-2,-2,-4,-2] (変更なし)

f([], 0) = [] (ゼロサムケースの変更なし)


例(偽、一貫性のある非配列値):

ケースを作ることが不可能: f([-2,4,6,-8], 3) = falsy (E.G. -1)

ゼロサムケース: f([], non-zero number) = falsy (E.G. -1)

  • 注:のような値[-1]は、潜在的な真実の出力であるため、偽造には有効ではありません。

ルール:

  • 入力は、配列形式で、または引数のリストとして、最後または最初として取得できますx
  • 出力は、区切られた整数のリストです。EG 1\n2\n3\nまたは[1,2,3]
  • 整数の配列以外の任意の値を偽のインジケータとして使用できます。
  • コードは終了配列のサイズを最大化する必要があり、順序は関係ありません。
    • EG f([3,2,3],5)の両方[2,3][3,2]同等に有効です。
    • EG f([1,1,2],2)だけ返すことができる[1,1]よう[2]に短いです。
  • の合計aとの値は両方ともxより小さい2^32-1およびより大きい-2^32-1
  • これは、バイト数が最も少なくなります。
  • 有効な同じサイズのサブアレイが複数ある場合、それらすべてを出力することはできません。単一のものを選択して出力する必要があります。

これが投稿されたかどうかを教えてください、私はそれを見つけることができませんでした。

私がこのように見つけた投稿:関連するが閉じている、...


1
「偽の、一貫性のある非配列値」にエラーの発生が含まれると思いますか
ジョナサンアラン

整数の配列以外の任意の値を偽のインジケータとして使用できます。」空の配列が含まれていますか?
シャギー

@shaggy []は潜在的な真実の値を示していますよね?そのメタルールを許可することは、明確な真実と偽りよりも重要ですか?
魔法のタコ

@JohnathanAllanは、Truthyシナリオでそのエラーを発生できない場合-私は推測します。しかし、これは意図的に仕様を拡張しようとしていると感じています。私はインジケータから戻り値に表現を変更した場合、それはそれでいいですか?
魔法のタコ

メタごとに一貫した終了値が戻り値としてカウントされると思いますか?
魔法のタコ

回答:


7

Brachylog、8バイト

h⊇.+~t?∧

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

毎月のBrachylogの回答。false.不可能な場合に戻ります。

説明

h⊇.           The output is a subset of the head of the input
  .+~t?       The sum of the elements of the output must equal the tail of the input
       ∧      (Avoid implicit unification between the output and the input)

6

パイソン2108の 104バイト

lambda a,n:[x for l in range(len(a)+1)for x in combinations(a,l)if sum(x)==n][-1]
from itertools import*

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

-4バイト、ジョナサンアランのおかげ


パイソン2108の 106バイト

def f(a,n):
 q=[a]
 while q:
  x=q.pop(0);q+=[x[:i]+x[i+1:]for i in range(len(x))]
  if sum(x)==n:return x

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

-2バイト、Janathan Frechのおかげ


1
あなたは使用することができますrange(-len(a),1)-l2を保存するのではなく、lambda a,n:[x for l in range(len(a)+1)for x in combinations(a,l)if sum(x)==n][-1]4を節約
ジョナサン・アラン

@JonathanAllanありがとう:)
TFeld


@JonathanFrechありがとう、昨日は疲れていたに違いない;)
TFeld



4

Pyth、8バイト

  • 8-byterTry it!)–可能な解決策を1つだけ出力します。解決できない入力の場合、STDOUTには何も出力されません。STDOUTは空の文字列であり、技術的にはPythでは偽と言えますが、STDERRに書き込みます。これを提案してくれたFryAmTheEggman(STDERRを無視し、STDOUT出力のみに焦点を合わせている)に感謝します。

    efqz`sTy    
    
  • 9-byterTry it!)–可能なソリューションを1つだけ出力し、デフォルトで許可されているシングルトンリストにラップします(例([1...10], 10) -> [[1,2,3,4]]; ([], 0) -> [[]])。解決できない入力の場合、Pythではfalse []を返します。

    >1fqz`sTy
    
  • 10-byterそれを試してみてください!) -明確に出力するために、シングルトン・リストのルールを使用し、使用しないで0はなく[]falsy値として。

    e+0fqz`sTy
    

説明

最初に、コードは入力リスト(そのすべての可能な順序付きサブコレクション)のパワーセットを計算します。次に、合計が入力数に等しいコレクションのみを保持します。コレクションは最短から最長まで生成されるため、最後のコレクションに焦点を当てることに注意してください。入手するには:

  • 8-byterは、単に使用して終わり、ビルトインのエラーがスローされますが、STDERRはSTDOUTに出力falsyある空の文字列、という、私たちのサイトの規則に従って無視することができます。
  • 9-byterは、最後の要素がかかりますが、同等のPythonコードを使用lst[-1:]する代わりにlst[-1]解決不可能な入力のためにスローされるのエラーを回避するために。
  • 10 byterを付加し0濾過サブコレクションのリストには、そのコレクション(最後の要素)の端を取ります。入力が解決可能でない場合、代わりに0が自然に使用されます。

[]偽物ですか?きちんとした。なぜPythはそれを行うのです[]か?
魔法のタコ

@MagicOctopusUrn Pythは実際にPythonから継承していますオンラインで試してみてください
Mr Xcoder

@FryAmTheEggmanは、テストケースで空のリストが真実の出力にならないでしょうf([], 0) = []か?
ソク

@FryAmTheEggmanご提案ありがとうございます!私は必要な変更を行いました:)
Xcoder氏18年



3

Brachylog、4バイト

⟨⊇+⟩

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

参照の編集履歴によると1月8日まで進行中だった述語構成機能のおかげでh⊇.+~t?∧はるかに短いことを除いてFatalizeとほぼ同等で、 2か月以上前に回答を延期しました。あるサンドイッチに拡大、サンドイッチは、とにかく、その行にあるように中括弧は、この場合は無関係です。⟨⊇+⟩{[I,J]∧I⊇.+J∧}

                The input
[I,J]           is a list of two elements I and J.
        .       The output,
         +J     which sums to J
           ∧    (which we don't unify with the output),
      I⊇        is a sublist of I
     ∧          (which we don't unify with [I,J]).

Fatalizeの回答の劇的な変換は、同じ変数を使用して同じ述語を使用しますが、異なる編成から1バイト短くなります。

Brachylog、7バイト

h⊇.&t~+

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

           The input
h          's first element
 ⊇         is a superlist of
  .        the output,
   &       and the input
    t      's last item
     ~+    is the sum of the elements of
           the output.

(また、奇妙なものを見たい人は、テストケースのアンダースコアをハイフンに変更してください。)


1
サンドイッチは2018年11月に@ ais523によって実装されましたが、2019
。–

1
もちろん、この歴史を掘ることは重要ではありません。なぜなら、挑戦を後回しにする言語は何年もの間許可されてきたからです。
pppery




2

これはクールで小さなものから始まりましたが、エッジケースが私を引き付けました。何が起ころうとも、私はこれに取り組んだ仕事を誇りに思っています。

Pythonの3169の161 154バイト

from itertools import*
def f(a,x):
	if sum(a)==x:return a
	try:return[c for i in range(len(a))for c in combinations(a,i)if sum(c)==x][-1]
	except:return 0

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


これは[code-golf]であるため、バイトカウントをできるだけ少なくするようにしてください。あなたは一流の改行と他のいくつかの些細なホワイトスペースゴルフを持っています、そして私はパイソンを知っている誰かがこれをさらに下にゴルフできると確信しています。
ジュゼッペ

@Giuseppe主要な空白を思い出させてくれてありがとう。私はこれのいくつかの部分を統合しようといくつかの時間を費やしましたが、その間に他の人が編集を提案できるようにそれを投稿することにしました。
ギガフロップ

問題ない!Pythonを実行してから5年が経ちましたが、range(x)生成されません(0...x-1)か?だから、あなたrange(len(a))はあなたに配列を変更しないままにする可能性を与えていませんか?
ジュゼッペ

@ジュゼッペ・ユーレカ、それをやった。一緒に作業していた新しい素材に集中しすぎていたのかもしれません。
ギガフロップ

if a==[] and x==0使用する代わりにif sum(a)==x。その後、+1からも削除できますrange
ヴェダントカンドー


1

アタッシュ、28バイト

${(y&`=@Sum\Radiations@x)@0}

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

代替案

34バイトf[x,y]:=({y=Sum@_}\Radiations@x)@0

30バイトFirst@${y&`=@Sum\Radiations@x}

29バイト{(_&`=@Sum\_2)@0}#/Radiations

29バイト${({y=Sum@_}\Radiations@x)@0}

29バイト`@&0@${y&`=@Sum\Radiations@x}

29バイト{_}@@${y&`=@Sum\Radiations@x}

説明

${(y&`=@Sum\Radiations@x)@0}
${                         }    function receiving two arguments, x and y
            Radiations@x        calculate the radiations of x
                                (simulates removing all possible subslices of x)
           \                    keep those radiations
        Sum                     ...whose sum...
     `=@                        ...equals...
   y&                           ...y
  (                     )@0     select the first one (always the longest)

0

APL(NARS)、65文字、130バイト

{m←⍺=+/¨v←1↓{0=⍴⍵:⊂⍬⋄s,(⊂1⌷⍵),¨s←∇1↓⍵}⍵⋄0=↑⍴b←m/v:⍬⋄b⊃⍨n⍳⌈/n←⍴¨b}

セットのセットの最初の要素は1つのvoidセット(ここでは⍬Zilde)になるため、↓が使用されます。

見つからない場合、またはエラーの場合、⍬または印刷テキストで返されます。

  o←⎕fmt
  o ⍬
┌0─┐
│ 0│
└~─┘

テスト:

  z←{m←⍺=+/¨v←1↓{0=⍴⍵:⊂⍬⋄s,(⊂1⌷⍵),¨s←∇1↓⍵}⍵⋄0=↑⍴b←m/v:⍬⋄b⊃⍨n⍳⌈/n←⍴¨b}

  o 1 z ,1
┌1─┐
│ 1│
└~─┘
  o 2 z ,1
┌0─┐
│ 0│
└~─┘
  o 10 z 1 2 3 4 5 6 7 8 9 10
┌4───────┐
│ 1 2 3 4│
└~───────┘
  o 10 z 2,2,2,2,2,2,2,2,2
┌5─────────┐
│ 2 2 2 2 2│
└~─────────┘
  o ¯8 z 2,2,2,2,¯2,¯2,¯2,¯4,¯2
┌7──────────────────┐
│ 2 2 ¯2 ¯2 ¯2 ¯4 ¯2│
└~──────────────────┘
  o ¯6 z ¯2,¯4,¯2
┌2─────┐
│ ¯4 ¯2│
└~─────┘
  o 0 z 2,2,2,4,2,¯2,¯2,¯2,¯4,¯2
┌10───────────────────────┐
│ 2 2 2 4 2 ¯2 ¯2 ¯2 ¯4 ¯2│
└~────────────────────────┘
  o 10 z 1 2 3 4
┌4───────┐
│ 1 2 3 4│
└~───────┘
  o 10 z 1 2 3
┌0─┐
│ 0│
└~─┘
  o 0 z ⍬
┌0─┐
│ 0│
└~─┘
  o +/⍬  
0
~
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.