내 배열은 이것과 같아야하지만 그렇지 않습니다!


21

n 개의 정수와 단일 정수 a를 포함 하는 정수 배열이 제공됩니다 . 요소 중 가장 적은 양의 제거 의 합 만드는 같음을 . 없이 조합하면 캔 양식 하는 falsy 값을 반환합니다.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
"가짜, 일관된 비 배열 값"에 오류 발생이 포함되어 있다고 생각합니까?
Jonathan Allan

" 정수 배열 이외의 다른 값은 거짓 표시기로 사용할 수 있습니다. "빈 배열이 포함됩니까?
얽히고 설킨

@shaggy []는 잠재적 인 진실 된 가치를 나타냅니다. 메타 규칙을 허용하는 것이 독특하고 진실과 거짓보다 더 중요합니까?
매직 문어 Urn

Truthy 시나리오에서 오류가 발생하지 않으면 @JohnathanAllan-가정합니다. 그러나 나는 이것이 의도적으로 사양을 확장하려고 시도하고 있다고 생각합니다. 표시기에서 반환 값으로 문구를 변경하면 괜찮습니까?
매직 문어 Urn

메타 당 일관된 종료 값이 반환 값으로 계산된다고 생각합니까?
매직 문어 Urn

답변:


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

파이썬 2 , 108104 바이트

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*

온라인으로 사용해보십시오!

Jonathan Allan 덕분에 -4 바이트


파이썬 2 , 108106 바이트

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

온라인으로 사용해보십시오!

Janathan Frech 덕분에 -2 바이트


1
당신은 사용할 수 range(-len(a),1)-l(2)를 저장하지만, lambda a,n:[x for l in range(len(a)+1)for x in combinations(a,l)if sum(x)==n][-1]4. 저장
조나단 앨런



@JonathanFrech 감사합니다, 어제 피곤했습니다.;)
TFeld



4

Pyth , 8 바이트

  • 8 바이 터 ( 시험해보십시오! ) – 가능한 솔루션 하나만 출력합니다. 해결할 수없는 입력의 경우 빈 문자열 인 STDOUT에 아무것도 인쇄하지 않으며 Pyth에서는 기술적으로 거짓으로 말하지만 STDERR에 씁니다. 이것을 제안하고 (STDERR을 무시하고 STDOUT 출력에만 집중) FryAmTheEggman 에게 감사하여 1 바이트를 절약합니다.

    efqz`sTy    
    
  • 9- 바이 터 ( 시험해보십시오! ) – 기본적 으로 허용 되는대로 단일 목록으로 래핑 된 가능한 솔루션을 하나만 출력합니다 (예 :)([1...10], 10) -> [[1,2,3,4]]; ([], 0) -> [[]] . 해석 할 수없는 입력의 경우 Pyth 에서 false []인을 반환합니다 .

    >1fqz`sTy
    
  • 10 바이 터 ( 시험해보십시오! ) – 단일 목록 규칙을 사용 0하지 않고 []잘못된 값으로 사용 하지 않고보다 선명한 출력

    e+0fqz`sTy
    

설명

먼저, 코드는 입력 목록 (가능한 모든 정렬 된 서브 컬렉션)의 파워 셋을 계산합니다. 그런 다음 합계가 입력 번호와 같은 컬렉션 만 유지합니다. 컬렉션은 가장 짧은 것부터 가장 긴 것으로 생성되므로 마지막 컬렉션에 중점을 둡니다. 그것을 얻으려면 :

  • 8 byter은 단순히 사용 에서 오류가 발생 내장을하지만, STDERR는 우리의 사이트 규칙에 따라, STDOUT에 출력이 falsy 인 빈 문자열 인 무시할 수 있습니다.
  • 9 byter는 마지막 요소를 걸리지 만 해당 파이썬 코드를 사용하는 lst[-1:]대신에 lst[-1]해결 못하는 입력에 발생되는 것을 피하기 오류로합니다.
  • 10 byter는 앞에 추가 0 필터링 된 서브 - 컬렉션의 목록은, 그 컬렉션 (마지막 요소)의 단부 걸린다. 입력을 해결할 수없는 경우 자연스럽게 0 이 사용됩니다.

[]거짓인가? 산뜻한. 왜 Pyth가 그렇게 []합니까?
매직 문어 Urn

@MagicOctopusUrn Pyth는 파이썬에서 실제로 상속합니다 . 온라인으로 사용해보십시오 .
Mr. Xcoder

@FryAmTheEggman은 테스트 케이스에서 빈 목록이 진실한 결과가 아닐까요 f([], 0) = []?
Sok

@FryAmTheEggman 제안 해 주셔서 감사합니다! 나는 필요한 변경을했다 :)
Mr. Xcoder



3

Brachylog , 4 바이트

⟨⊇+⟩

온라인으로 사용해보십시오!

참조의 편집 히스토리에 따라 1 월 8 일까지 진행된 작업으로 2 개월 넘게 답변 을 발표 한 술어 구성 기능 덕분에 훨씬 더 짧은 h⊇.+~t?∧것을 제외하고는 Fatalize와 거의 동일합니다 . 는 샌드위치 이며, 샌드위치가 자체 라인에 있기 때문에이 경우에는 버팀대가 관련이 없습니다.⟨⊇+⟩{[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 's answer의 극적인 변형은 동일한 변수로 동일한 술어를 사용하지만 다르게 구성되는 것보다 바이트가 짧습니다.

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
Fatalize

1
물론,이 도전을 뒤 따르는 언어가 수년간 허용되어 왔기 때문에이 역사 파기 문제는 없습니다.
pppery


2

클린 , 89 바이트

import StdEnv,Data.List,Data.Func
$n=find((==)n o sum)o sortBy(on(>)length)o subsequences

온라인으로 사용해보십시오!

적절한 요소 조합이없는 경우 $ :: Int -> [Int] -> (Maybe [Int])반환 되는 함수를 정의합니다 .Nothing(Just [elements...])



2

이것은 시원하고 작은 것으로 시작되었지만 가장자리 사례가 나에게 도움이되었습니다. 무슨 일이 있어도이 작업에 참여한 것을 자랑스럽게 생각합니다.

파이썬 3 , 169161154 바이트

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

@Giuseppe 최고의 공백을 상기시켜 주셔서 감사합니다. 나는 이것의 일부를 통합하는 데 시간을 보냈지 만 다른 사람들이 편집을 제안 할 수있는 경우 그것을 게시하기로 결정했습니다.
Gigaflop

문제가 아니다! 파이썬을 만든 지 5 년이 지났지 만 range(x)생성 하지 (0...x-1)않습니까? 따라서 range(len(a))배열을 변경하지 않고 떠날 가능성이 있습니까?
Giuseppe

@ 주세페 유레카. 내가 작업했던 새로운 자료에 너무 집중하고 있었을 것입니다.
Gigaflop

대신에 if a==[] and x==0사용 if sum(a)==x. 그런 다음 +1에서 제거 할 수도 있습니다 range.
Vedant Kandoi


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}

↓ 세트 세트의 첫 번째 요소가 하나의 void 세트 (여기서는 ⍬ Zilde)이므로 + / ⍬가 0으로 보이기 때문에 제거하고 싶습니다.

찾을 수 없거나 오류가 발생하면 ⍬ 또는 인쇄 텍스트로 반환됩니다.

  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.