합계가 없습니까?


32

함께 추가 될 때 두 개 (필수 별개의 것은 아님) 요소가 세트 자체의 일부가 아닌 경우 세트에는 합계가 없습니다.

예를 들어, {1, 5, 7}모든 멤버가 홀수이고 함께 추가 할 때 홀수 두 개가 항상 짝수이므로 합계가 없습니다. 반면 에, 세트의 멤버에 함께 추가 하거나 함께 추가 할 때 {2, 4, 9, 13}합계가 필요하지 않습니다 .2 + 2 = 44 + 9 = 13

세트를 입력으로 취하고 세트에 합계가 없으면 Truthy 값을 출력하고 그렇지 않으면 Falsy를 출력하는 프로그램 또는 함수를 작성하십시오.

예 :

Sum-free:
{}
{4}
{1, 5, 7}
{16, 1, 4, 9}

Not sum-free:
{0}
{1, 4, 5, 7}
{3, 0}
{16, 1, 4, 8}

세트가 배열 / 목록 일 수 있습니까?
코너 오브라이언

@ ChoongHanO'Bʀɪᴇɴ 물론입니다.
orlp

5
더 많은 테스트 사례가 좋을 수도 있습니다!
Lynn

4
테스트 케이스가 필요합니다. 세트는 순전히 독특합니까?
고양이

3
세트와 별개의 요소가 아닌 두 요소의 합을 의미한다는 것을 분명히해야한다고 생각합니다.
Gregory Nisbet

답변:


14

Pyth- 8 5 바이트

3 바이트를 절약 해 준 @FryAmTheEggman에게 감사합니다.

!@sM*

테스트 스위트 .

!             Logical not. This makes the empty intersection true and vice versa.
 @    Q       Setwise intersection with input (implictly).
  sM          Map sum to all the pairs.
   *QQ        Get all pairs by doing cartesian product with input*input (implicit).

@FryAmTheEggman smart ....
Maltysen

방금 같은 대답을 얻었지만 * QQ는 실제로 [1,1]을 생성하는데, 이는 두 개의 동일한 요소이며 맵에 나타나지 않아야합니다.
busukxuan

@ busukxuan 질문은 실제로 2 + 2 = 4OP에서 중복을 고려하도록 요청합니다 . FryAmTheEggman의 골프 전에 내 대답은 실제로이 때문에 대체와 함께.C ombinations 사용 했습니다.
Maltysen

@Maltysen 아 좋은!
busukxuan

40

파이썬 2, 41 바이트

lambda s:s==s-{a+b for a in s for b in s}

s 파이썬 세트 여야합니다.

재미있는 사실 sum-free은 내 이름의 아나그램입니다.


lambda s:not{a+b for a in s for b in s}&s같은 길이입니다. 슬프게도 부정을 줄이는 방법을 찾을 수 없습니다.
FryAmTheEggman 1

16
아나그램에 대한 찬성
Neil

@ feersum 이것은 당신의 질문입니다.
Filip Haglund

@FilipHaglund 아니오, orlp입니다.
mbomb007

@ mbomb007 심각하다면, 그렇습니다. 그러나 그것은 심각하지 않은 의미를 가질 수 있습니다 : 이것은 당신의 질문입니다 / 당신은 질문을해야합니다 / 당신은 여기의 다른 사람들을 이겼습니다 (Python). 그들은 " 당신OP 입니다." 라고 말하지 않았습니다 .
Outgolfer Erik

26

젤리 , 5 바이트

ṗ3ḅ-P

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

작동 원리

ṗ3ḅ-P  Main link. Argument: A (array)

ṗ3     Take the third Cartesian power of A, i.e., generate all triplets that
       consist of elements of A.
  ḅ-   Convert each triplet from base -1 to integer.
       This maps [a, b, c] to a - b + c = (a + c) - b.
       If (a + c) belong to A, this will yield 0 for some b.
    P  Take the product of all resulting integers. 

13

자바 스크립트, 86 42 41 바이트

n=>!n.some(m=>n.some(o=>n.includes(m+o)))

괄호 / 중괄호에서 많은 바이트를 절약 해 주신 Cᴏɴᴏʀ O'Bʀɪᴇɴ에게 감사드립니다. 또한 함수가 있어야하는 반대 부울 값을 반환한다고 지적한 Neil에게 감사드립니다.

재정 의하여 바이트를 줄이려고 시도했지만 n.some불행히도 프로토 타입 함수이기 때문에 작동하지 않습니다. Array.prototype.mapJS 에는 더 나은 솔루션이있을 수 있지만 일부 기능은 정말 재미 있습니다.

.includes.indexOf와 같은 것을 사용하고 1을 추가하는 것 보다 더 짧은 방법이 있는지 궁금합니다 .


테스트 :

> (n=>!n.some(m=>n.some(o=>n.includes(m+o))))([1,5,7]);
true
> (n=>!n.some(m=>n.some(o=>n.includes(m+o))))([1,5,7,12]);
false

1
시도n=>n.some(m=>n.some(o=>n.some(p=>m+o==p)))
코너 오브라이언

1
문제 없어! 익명 함수의 동작으로 인해 작동합니다. 여기에 다른 ES6 답변을 보면, 당신은 꽤 많이 배울 것입니다 :)
Conor O'Brien

1
안녕하세요, PPCG에 오신 것을 환영합니다!
NoOneIsHere7

1
이것의 의미가 잘못되었습니다. 세트에 합계가 없는지 알려줍니다. 또한 n.contains(o+p)가장 안쪽에 2 바이트를 절약하는을 사용 하십시오 some.
Neil

1
죄송합니다. 예, includes원래는 호출 contains되었지만 일부 라이브러리에는 충돌하는 정의가 있습니다.
Neil

12

MATL, 5 바이트

t&+m~

이것은 모든 항목이 사실이라면 1거짓이고 그렇지 않으면 거짓 인 배열을 출력합니다 . 다음은 MATL에서 다양한 진실 / 거짓 값을 보여주는 데모 입니다.

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

설명

        % Implicitly grab input
t       % Duplicate
&+      % Compute sum of each element with every other element (2D Matrix)
m       % Check which members of the input are present in this matrix of sums
~       % Negate the result to yield a truthy value for sum-free sets
        % Implicitly display truthy/falsey value

12

매스 매 티카, 23 바이트

{}==#⋂Tr/@#~Tuples~2&

실수로 제출물을 편집했지만 제출 한 그대로 되돌 렸습니다. 죄송합니다!
DavidC

그건 그렇고, 튜플을 만들기 전에 목록에서 요소를 제거하지 않아도된다는 훌륭한 통찰력.
DavidC

1
교체하십시오 (U-22C2). 코드는 현재 Mathematica에 복사 할 수 없습니다.
LLlAMnYP

@LLlAMnYP 감사합니다. Mathematica는 표현식을 복사 할 때 표현식의 형식을 자동으로 지정하므로 유니 코드 문자를 수동으로 찾아야했습니다. 나는 잘못된 것을 찾았을 것입니다.
시몬스

1
@ASimmons Mathematica에서 문자를 강조 표시하고 F1을 누르면 항상 문자의 유니 코드 코드 포인트 (16 진수)를 포함하는 특정 문자에 대한 도움말 페이지가 표시됩니다. 유니 코드로 복사 할 수는 없지만 실제로 성가시다. Mathematica.SE 어딘가에 "유니 코드로 복사"에 대한 솔루션이 있다고 생각하지만 IIRC는 사소한 것이 아닙니다.
마틴 엔더

11

하스켈, 32 , 30 바이트

간단한 해결책 :

f x=and[a+b/=c|a<-x,b<-x,c<-x]

@Lynn이 저장 한 2 바이트


f x=and[a+b/=c|a<-x,b<-x,c<-x]30 바이트
Lynn


6

J, 18 10 8 바이트

마일 덕분에 8 바이트가 절약되었고 FrownyFrog 덕분에 2 바이트가 절약되었습니다!

-:]-.+/~

원래 목록과 설정된 합계의 차이를 일치시킵니다. 이것은 다음과 같습니다.

(-: (] -. +/~)) y

입력 용 y. 이것은 다음과 같이 번역됩니다.

y -: (] -. +/~) y
y -: (y -. +/~ y)

+/~를 사용하여 합계 테이블을 반환합니다 y. 의 경우 y =: 16 1 4 9다음을 제공합니다.

   +/~ 16 1 4 9
32 17 20 25
17  2  5 10
20  5  8 13
25 10 13 18

그런 다음 이 테이블 -.y없는 모든 요소로 구성된 목록을 생성하는를 사용 합니다. 목록에 합계가없는 경우 동일한 목록이 생성됩니다. 그런 다음 -:목록이 동일한 지 확인하여 원하는 출력을 생성합니다.

올드, 18 바이트

[:-.[:>./^:_+/~e.]

+/~자신에게 추가 된 세트 값의 테이블을 작성하고 e.해당 멤버가 원래 세트에 있는지 확인합니다. 나머지는 최대 요소를 부정하고 있습니다.


-:]-.&,+/~차이 설정 -.및 목록 일치를 사용하여 10 바이트 동안-:
마일

아, 아주 좋아요!
코너 오브라이언

&가 필요하지 않으며 -.이미 y의 셀에서 작동합니다.
FrownyFrog

@FrownyFrog 매혹적인, TIL. 감사!
코너 오브라이언

5

망막 , 45 44 바이트

\d+
<$&$*1>
$
$`$`
M`(<1*)>.*<(1*>).*\1\2
^0

입력은 쉼표로 구분 된 10 진수 목록입니다. 출력이 0(거짓) 또는 1(거친)입니다.

온라인으로 사용해보십시오! 첫 번째 줄은 줄 바꿈으로 구분 된 테스트 스위트를 활성화합니다.

설명

1 단계 : 대체

\d+
<$&$*1>

입력의 모든 요소를 ​​단항으로 변환하고에 래핑합니다 <...>. 꺾쇠 괄호의 목적은 0빈 목록과 만 포함 된 목록을 구별하는 것입니다 (단일 표현은 0자체가 비어 있기 때문에 ).

2 단계 : 교체

$
$`$`

우리는 끝에 두 번 추가하여 문자열을 3 번 반복합니다.

3 단계 : 경기

M`(<1*)>.*<(1*>).*\1\2

우리는 이제 결과에서 세 개의 숫자를 찾아서 첫 번째 두 숫자가 세 번째 숫자를 더합니다. 일치하는 항목이 계산됩니다 (실제로 일치하는 항목은 겹칠 수 없기 때문에 이러한 모든 튜플을 계산하지는 않지만 해당 튜플이있는 경우 검색됩니다). 따라서 우리 0는 합계가없는 세트와 그렇지 않으면 긍정적 인 것을 얻 습니다.

4 단계 : 경기

^0

이전 단계가 우리가 원하는 것과 반대를 준 이후, 우리의 일치 계산에 의한 결과 무효화 ^0되는 1입력 00다른 모든 것들에 대한합니다.


5

옥타브, 29 21 25 바이트

@(s)~[ismember(s,s+s') 0]

Suever 에게 감사합니다 ! 배열을 반환합니다. 나는 0끝에 []무결 제로 만들기 위해 추가 했습니다 . 옥타브에서 진실과 거짓을 확인하려면 다음을 수행하십시오.

> f=@(s)~[ismember(s,s+s') 0]

> if f([]) "sum-free" else "not sum-free" end
ans = sum-free

> if f([0]) "sum-free" else "not sum-free" end
ans = not sum-free

> if f([4]) "sum-free" else "not sum-free" end
ans = sum-free

> if f([1 3]) "sum-free" else "not sum-free" end
ans = sum-free

> if f([2 4]) "sum-free" else "not sum-free" end
ans = not sum-free

0 또는 1을 반환하는 대안은 다음과 같습니다.

@(s)~numel(intersect(s+s',s))

@(s)~ismember(s+s',s)배열이 진실 / 거짓이 될 수 있기 때문에 변경할 수 있습니다.
Suever

5

클로저, 47 37 바이트

#(=(for[a % b % :when(%(+ a b))]a)[])

아주 평범한 해결책. list comprehension을 사용하여 합이 다른 요소와 동일한 모든 요소를 ​​찾습니다.

38 바이트 변형 :

#(every? nil?(for[a % b %](%(+ a b))))

1
도전에서 당신은 입력으로 세트를 취하고 있기 때문에, 당신은 단순히 #(=(for[a % b % :when(%(+ a b))]a)[])10 바이트를 절약 할 수있는 것처럼 멤버쉽을 확인하기 위해 세트를 사용할 수 있습니다
마일

@ 마일 오 오 와우, 고마워, 나는 그 사실을 무시하고 목록으로 작업했습니다.
cliffroot

4

펄 6 ,  24 21 20  19 바이트

{not any (@_ X+@_)X==@_}
{so all (@_ X+@_)X!==@_}
{not @_ (&)(@_ X+@_)}
{not @_∩(@_ X+@_)}

{!(@_∩(@_ X+@_))}

입력은 List 와 같은 위치 값 입니다. ( 세트Associative 이므로 호출 해야합니다.)
.keys

테스트:

#! /usr/bin/env perl6
use v6.c;
use Test;

my @sum-free = (
  (),
  (4,),
  (1, 5, 7),
  (16, 1, 4, 9),
);

my @not-sum-free = (
  (0,),
  (1, 4, 5, 7),
  (3, 0),
  (16, 1, 4, 8),
);

my @tests = ( |(@sum-free X=> True), |(@not-sum-free X=> False) );

plan +@tests;

# store the lambda in lexical namespace for clarity
my &sum-free-set = {!(@_∩(@_ X+@_))}

for @tests -> $_ ( :key(@list), :value($expected) ) {
  is sum-free-set(@list), $expected, .gist
}
1..8
ok 1 - () => True
ok 2 - (4) => True
ok 3 - (1 5 7) => True
ok 4 - (16 1 4 9) => True
ok 5 - (0) => False
ok 6 - (1 4 5 7) => False
ok 7 - (3 0) => False
ok 8 - (16 1 4 8) => False

4

Mathematica 63 62 42 바이트

이 더 짧은 버전은 A Simmons의 제출로부터 이익을 얻었습니다. IntegerPartitions적용 하기 전에 목록에서 요소를 제거 할 필요가 없습니다 .

요소를 두 개의 정수 (각각 목록에서)로 분할 할 수없는 경우 IntegerPartitions[#,{2},#]=={}보유합니다. And이것이 목록의 모든 요소를 ​​보유하는지 확인합니다. 그렇다면 목록에 합계가 없습니다.

And@@(IntegerPartitions[#,{2},#]=={}&/@#)&

 And@@(IntegerPartitions[#,{2},#]=={}&/@ #)&@{2, 4, 9, 13}

그릇된


 And@@(IntegerPartitions[#,{2},#]=={}&/@ #)&@{1, 5, 7}

참된


2는 있지만 2만큼 다른 홀수는 없습니다.

 And@@(IntegerPartitions[#,{2},#]=={}&/@#)&@{2, 3, 7, 11, 17, 23, 29, 37, 41, 47, 53, 59, 67, 71}

참된


수행, 당신은 a통합 문서에 다른 곳에서 정의? 이 표현식은 내가 평가할 때 원하는 출력을 제공하지 않습니다.
시몬스

감사. 그랬어 a야 했어 #. 나는 그것을 수정하고 불필요한 제거했다 @.
DavidC

3

루비, 36 바이트

집합에 대한 직교 곱을 구성하고 모든 요소의 합을 찾은 다음 원래 집합과의 교차를 확인합니다. 입력은 배열이지만 루비에서는 어쨌든 잘 작동하도록 충분한 세트 작업이 있습니다.

@feersum의 영감으로 인해 원래 솔루션보다 -1 바이트 ( &대신 사용 -및 비교 [])

여기 사용해보십시오!

->s{s-s.product(s).map{|x,y|x+y}==s}

3

파이썬, 40 바이트

lambda s:s^{a+b for a in s for b in s}>s

^ = 대칭 적 차이, 두 세트 중 하나에 요소가있는 새로운 세트

> 왼쪽 집합이 오른쪽 집합의 상위 집합이면 참입니다.


이것이 필요한지 모르겠지만 빈 세트에서는 작동하지 않습니다.
xnor

1
글쎄, 위키 백과 는 (다른 것들 중에서) 그것을 말합니다 A is sum-free if the equation a + b = c has no solution with a, b, c ∈ A. 이 정의를 사용하면 빈 세트에는 합계가 없으며 내 대답은 정확합니다. 하지만 편견이있을 수 있습니다.
Lulhum

3
이 정의 는 빈 집합에 방정식을 만족하는 a, b 및 c가 없기 때문에 빈 집합 합계가 없음을 의미합니다. OP의 새로 추가 된 테스트 사례가이를 지원합니다.
Dennis

3

Brachylog , 13 바이트

'(p:?+L:?x'L)

설명

'(          )  True if what's in the parentheses is impossible, false otherwise
  p            Get a permutation of Input
   :?+L        L is the list of element-wise sums of the permutation with Input
       :?x'L   There is at least one element of Input in L

인가 [2:2]의 두 요소의 부분 집합은 [2:4:9]?
Leaky Nun

@LeakyNun 아니, 때문에 2 만 번 나타납니다 [2:4:9].
치명적인

3

R, 39 36 바이트

w<-function(s)!any(outer(s,s,'+')%in%s)

로 설정합니다. w(s)여기서 s값의 집합 (실제로는 벡터)입니다. 다음은 일부 테스트 사례의 출력입니다.

> w(numeric(0)) # The empty set
[1] TRUE
> w(0)
[1] FALSE
> w(1)
[1] TRUE
> w(c(1, 5, 7))
[1] TRUE
> w(c(2, 4, 9, 13))
[1] FALSE

c()많은 값을 가져와 벡터로 만드는 연결 함수는 어디에 있습니까 ?

편집 : @MickyT 덕분에 3 바이트를 절약하는 익명 함수로 만들었습니다.

function(s)!any(outer(s,s,'+')%in%s)

아주 좋아요 원하는 경우 이름이 지정되지 않은 함수로 게시 할 수 있습니다. 3 바이트를 절약 할 수 있습니다. 예 :function(s)!any(outer(s,s,'+')%in%s)
MickyT

3

라켓, 58 바이트

(λ(l)(andmap(λ(m)(andmap(λ(n)(not(memq(+ n m)l)))l))l))

설명:

(λ(l)(andmap(λ(m)(andmap(λ(n)(not(memq(+ n m)l)))l))l))
(λ(l)                                                 ) # Define a lambda function that takes in one parameter
     (andmap(λ(m)                                  )l)  # If for all m in l
                 (andmap(λ(n)                   )l)     # If for all n in l
                             (not(memq(+ n m)l))        # n + m is not in l

3

05AB1E , 9 5 바이트

Magic Octopus Urn 덕분에 4 바이트 절약

ãOå_P

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

설명

ã       # cartesian product
 O      # sum
  å     # check each if it exists in input
   _    # logical negation
    P   # product

되어 0 정말 05AB1E에 truthy?
Dennis

@Dennis 저는 0을이 도전에 대한 진실이라고 정의하고 다른 것을 거짓이라고 정의했습니다. 모호하지 않고 OP가 특정 형식을 지정하지 않는 한 정상적으로 작동하지 않습니까?
Emigna

이것이 진실 / 거짓에 대한 우리의 기본 해석입니다.
Dennis

@ 데니스 : 아, 너무 나쁘다. sum-free = 0이고 non-sum-free = "sum"은 챌린지 imo에 잘 맞습니다. 합계와 유사한 비표준 값을 true / false로 정의한 다른 많은 문제를 보았으므로 모호하지 않은 것이 기본값이라고 생각했습니다. 그런 다음 답변을 편집하겠습니다. 고마워요
Emigna

1
@MagicOctopusUrn : 감사합니다! 이 명령은 당시이 방법을 열심히하지만 지금은 감사 :) 이렇게하면 확실이 (난 그냥뿐만 아니라 그것을 놓칠 수 나는이 도전했을 때, 나는 05AB1E에 아주 새로운 WAS)
Emigna

2

APL, 8 바이트

⊢≡⊢~∘.+⍨

설명:

⊢         argument
 ≡        equals
  ⊢       argument
   ~      without 
    ∘.+⍨  sums of its elements

테스트:

      ( ⊢≡⊢~∘.+⍨ ) ¨ (1 5 7)(2 4 9 13)
1 0

2

하스켈, 30 바이트

f s=and[x+y/=z|x<-s,y<-s,z<-s]

더 흥미로운 더 짧은 솔루션이 있다고 생각하지만 찾지 못했습니다.

이들은 33 및 34 바이트입니다.

f s=and$((/=)<$>s<*>)$(+)<$>s<*>s
f s|q<-((-)<$>s<*>)=all(/=0)$q$q$s

elem을 사용 s하고 이해력의 마지막 부분을 제거합니까?
Maltysen

@Maltysen 당신이 의미하는 경우 f s=and[notElem(x+y)s|x<-s,y<-s], 그것은 32 f s=all(`notElem`s)$(+)<$>s<*>s입니다. 또한 31입니다.
xnor

2

실제로 7 바이트

;;∙♂Σ∩Y

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

;;∙♂Σ∩Y              Stack: [1,5,7]
;         duplicate         [1,5,7] [1,5,7]
 ;        duplicate         [1,5,7] [1,5,7] [1,5,7]
  ∙       cartesian product [1,5,7] [[1,1],[1,5],[1,7],[5,1],[5,5],[5,7],[7,1],[7,5],[7,7]]
   ♂Σ     sum each          [1,5,7] [2,6,8,6,10,12,8,12,14]
     ∩    intersect         []
      Y   negate            1

코드를보다 동일하게 만들 수 있습니까? ( )
Outgolfer Erik

1

TSQL, 47 바이트

CREATE table T(a int)
INSERT T values(1),(5),(7),(12)

SELECT min(iif(a.a+b.a<>T.a,1,0))FROM T a,T b,T

참고 :이 작업은 한 번만 실행 된 후 테이블을 삭제하거나 삭제하여 다시 실행해야합니다. 바이올린 편집기에서는 테이블을 만들 수 없습니다. 따라서 내 대답에 포함 된 바이올린은 이것을 보완하기 위해 2 바이트를 더 사용합니다. 바이올린 버전은 정리가 필요하지 않습니다.

깡깡이


1

펄, 46 바이트

45 바이트 코드 + 1 바이트 명령 줄 (-p)

$_="$_ $_ $_"!~/(\b\d++.*)((?1))(??{$1+$2})/

정규식 내에서 '코드 표현식'에 대한 Perl의 지원과 함께 단일 정규식 일치를 사용하여 일치 내에서 평가할 수 있습니다.

입력이 정렬되지 않은 요구 사항을 해결하기 위해 입력 문자열을 세 번 반복합니다. 이렇게하면 결과가 두 피연산자 뒤에 오게되며 동일한 숫자를 다시 일치시킬 수 있습니다 (예 : input의 경우 2 4).

사용 예 :

echo "3 5 6 8" | perl -p entry.pl

1

인자, 47 바이트

[ dup dup 2array [ Σ ] product-map ∩ { } = ]
  • ∩ { } =보다 작지만보다 짧습니다 intersects?.
  • Σ보다 짧지 만과 같습니다 sum.

감사합니다. math.unicode !

테스트 코드 :

USING: arrays kernel math.unicode sequences sequences.product ;
IN: sum-free

: sum-free? ( seq -- ? )
  dup dup 2array [ Σ ] product-map ∩ { } = ;

USING: tools.test sum-free ;
IN: sum-free.tests

{ t } [ { 5 7 9 } sum-free? ] unit-test
{ f } [ { 2 4 9 13 } sum-free? ] unit-test
{ t } [ { } sum-free? ] unit-test
{ f } [ { 0 } sum-free? ] unit-test
{ t } [ { 1 } sum-free? ] unit-test
{ f } [ { 0 1 } sum-free? ] unit-test

처음 두 개만 정확하다고 확신합니다. 나머지는 무엇인지에 대한 질문에서 명확하지 않으므로 지금은 괜찮습니다.


1

PHP, 73 바이트

코드 조각을 프로그램으로 바꾸려면 +8, insertusername 덕분에 쓸모없는 변수에 -8

<?foreach($argv as$p)foreach($argv as$q)if(in_array($p+$q,$argv))die;echo 1;

인쇄 1를위한 true빈 출력, false
사용 :php <filename> <value1> <value2> ...

테스트를위한 적격 기능 ( 94 86) : 반환 1또는 없음

function f($a){foreach($a as$p)foreach($a as$q)if(in_array($p+$q,$a))return;return 1;}

테스트

function out($a){if(!is_array($a))return$a;$r=[];foreach($a as$v)$r[]=out($v);return'['.join(',',$r).']';}
function cmp($a,$b){if(is_numeric($a)&&is_numeric($b))return 1e-2<abs($a-$b);if(is_array($a)&&is_array($b)&&count($a)==count($b)){foreach($a as $v){$w = array_shift($b);if(cmp($v,$w))return true;}return false;}return strcmp($a,$b);}
function test($x,$e,$y){static $h='<table border=1><tr><th>input</th><th>output</th><th>expected</th><th>ok?</th></tr>';echo"$h<tr><td>",out($x),'</td><td>',out($y),'</td><td>',out($e),'</td><td>',cmp($e,$y)?'N':'Y',"</td></tr>";$h='';}
$samples = [
    [], 1,
    [0], false,
    [1], 1,
    [0,1], false,
    [2, 4, 9, 13], false,
    [1,5,7], 1
];
while($samples)
{
    $a=array_shift($samples);
    $e=array_shift($samples);
    test($a,$e,f($a));
}

1
당신은 사용하지 않을로서 $i그리고 $j당신은 삭제할 수 있습니다 $i=>뿐만 아니라 $j=>저장 8 바이트 . 불행히도 코드 스 니펫은 올바른 답변이 아닙니다. 함수 또는 전체 프로그램으로 만들고 바이트 수에 포함하면 준비가됩니다. :)
insertusernamehere

1

자바, 67 바이트

s->!s.stream().anyMatch(p->s.stream().anyMatch(q->s.contains(p+q)))

입력은입니다 Set<Integer>. 테스트 :

import java.util.Arrays;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;

public class SumFree {
    public static void main(String[] args) {
        sumFree(s->!s.stream()
            .anyMatch(p->s.stream()
                .anyMatch(q->s.contains(p+q)))); // formatted to avoid wrapping
    }

    public static void sumFree(Function<Set<Integer>, Boolean> func) {
        test(func);
        test(func, 4);
        test(func, 1, 5, 7);
        test(func, 16, 1, 4, 9);
        test(func, 1, 4, 5, 7);
        test(func, 0);
        test(func, 3, 0);
        test(func, 16, 1, 4, 8);
    }

    public static void test(Function<Set<Integer>, Boolean> func, Integer... vals) {
        Set<Integer> set = Arrays.stream(vals).collect(Collectors.toSet());
        System.out.format("%b %s%n", func.apply(set), set);
    }
}

산출:

true []
true [4]
true [1, 5, 7]
true [16, 1, 4, 9]
false [0]
false [1, 4, 5, 7]
false [0, 3]
false [16, 1, 4, 8]

1

클로저, 34 바이트

#(not-any? %(for[i % j %](+ i j)))

나는 이전 Clojure 솔루션을 알기 전에 이것을 썼습니다. 어쨌든 이것은 입력 세트를의 pred함수 로 사용하기 때문에 더 컴팩트 합니다 not-any?.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.