Apakah ini set bebas pulsa?

32

Suatu himpunan bebas jumlah jika tidak ada dua (tidak harus berbeda) elemen ketika ditambahkan bersama adalah bagian dari himpunan itu sendiri.

Misalnya, {1, 5, 7}bebas-jumlah, karena semua anggota ganjil, dan dua angka ganjil ketika ditambahkan bersama selalu genap. Di sisi lain, {2, 4, 9, 13}tidak bebas jumlah, baik sebagai 2 + 2 = 4atau 4 + 9 = 13ditambahkan bersama-sama ke anggota set.

Tulis program atau fungsi yang mengambil set sebagai input, dan output nilai Kebenaran jika set bebas-jumlah, dan Falsy sebaliknya.

Contoh:

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

Not sum-free:
{0}
{1, 4, 5, 7}
{3, 0}
{16, 1, 4, 8}
orlp
sumber
Bisakah set menjadi array / daftar?
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Tentu.
orlp
5
Beberapa kasus uji lagi mungkin menyenangkan!
Lynn
4
Sangat membutuhkan uji kasus. Apakah set benar-benar unik?
kucing
3
Saya pikir Anda harus mengklarifikasi bahwa maksud Anda jumlah dari dua elemen tidak selalu berbeda dari set
Gregory Nisbet

Jawaban:

14

Pyth - 8 5 byte

Terima kasih kepada @FryAmTheEggman karena telah menyelamatkan saya 3 byte.

!@sM*

Test Suite .

!             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).
Maltysen
sumber
@FryAmTheEggman pintar ....
Maltysen
Saya baru saja mendapat jawaban yang sama, tetapi kemudian menyadari * QQ benar-benar menghasilkan [1,1], yang merupakan dua elemen yang sama, dan seharusnya tidak muncul di peta.
busukxuan
@busukxuan pertanyaannya sebenarnya meminta Anda untuk mempertimbangkan duplikat: 2 + 2 = 4dari OP. Jawaban saya sebelum golf .CFryAmTheEggman benar-benar menggunakan ombinasi dengan penggantian karena ini.
Maltysen
@Maltysen Oh bagus!
busukxuan
40

Python 2, 41 byte

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

s harus menjadi set Python.

Fakta menyenangkan: sum-freeadalah anagram nama saya.

feersum
sumber
lambda s:not{a+b for a in s for b in s}&smemiliki panjang yang sama. Sayangnya, saya tidak dapat menemukan cara untuk mempersingkat negasi.
FryAmTheEggman
16
Terpilih untuk anagram.
Neil
@feersum ini pertanyaan Anda .
Filip Haglund
@FilipHaglund Tidak, ini orlp.
mbomb007
@ mbomb007 Jika serius, ya. Tapi, yang dapat memiliki makna non-serius: ini adalah Anda pertanyaan / Anda ownd pertanyaan / Anda mengalahkan orang lain di sini (Python). Mereka tidak mengatakan " Kamu adalah OP ."
Erik the Outgolfer
26

Jelly , 5 byte

ṗ3ḅ-P

Cobalah online!

Bagaimana itu bekerja

ṗ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. 
Dennis
sumber
13

JavaScript, 86 42 41 byte

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

Terima kasih Cᴏɴᴏʀ O'Bʀɪᴇɴ karena telah menyelamatkan saya satu ton byte dari kurung / kurung keriting. Juga terima kasih Neil untuk menunjukkan bahwa fungsi mengembalikan nilai boolean yang berlawanan dari yang seharusnya.

Saya mencoba untuk mengurangi byte dengan mendefinisikan ulang n.sometetapi itu tidak berhasil karena sayangnya fungsi prototipe. Mungkin ada solusi yang lebih baik dengan Array.prototype.mapJS tetapi beberapa fungsi sangat menyenangkan.

Saya sekarang bertanya-tanya apakah ada cara yang lebih singkat daripada .includesmenggunakan sesuatu seperti .indexOf dan menambahkan 1 (yang akan memberikan nilai kebenaran jika berisi angka).


Pengujian:

> (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
charredgrass
sumber
1
Coban=>n.some(m=>n.some(o=>n.some(p=>m+o==p)))
Conor O'Brien
1
Tidak masalah! ini bekerja karena perilaku fungsi anonim. Lihatlah jawaban ES6 lain di sekitar sini, Anda akan belajar banyak :)
Conor O'Brien
1
Halo, dan selamat datang di PPCG!
NoOneIsHere
1
Arti ini salah, ini memberi tahu Anda jika set tidak bebas jumlah. Juga, gunakan n.contains(o+p)yang menghemat 2 byte di bagian terdalam some.
Neil
1
Maaf, ya, maksud saya includes(awalnya akan dipanggil containstetapi beberapa perpustakaan memiliki definisi yang bertentangan).
Neil
12

MATL, 5 byte

t&+m~

Ini menghasilkan array yang benar jika semua entri 1dan falsey sebaliknya. Berikut ini adalah demo untuk menunjukkan berbagai nilai kebenaran / kesalahan dalam MATL .

Cobalah secara Online

Penjelasan

        % 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
Suever
sumber
12

Mathematica, 23 Bytes

{}==#⋂Tr/@#~Tuples~2&
A Simmons
sumber
Saya salah mengedit kiriman Anda, tetapi kemudian mengembalikannya ke keadaan semula. Maaf!
DavidC
Omong-omong, wawasan yang bagus bahwa tidak ada elemen yang harus dihapus dari daftar sebelum membuat tuple.
DavidC
1
Silakan ganti dengan (U-22C2). Kode saat ini tidak dapat disalin ke dalam Mathematica.
LLlAMnYP
@ LLlAMnYP Terima kasih, saya harus menemukan karakter unicode secara manual karena Mathematica secara otomatis memformat ekspresi ketika Anda menyalinnya; Saya pasti menemukan yang salah.
A Simmons
1
@ ASimmons Jika Anda menyorot karakter dalam Mathematica dan menekan F1 itu akan menampilkan halaman bantuan untuk karakter tertentu yang selalu berisi titik kode Unicode karakter (dalam heksadesimal). Ini benar-benar menjengkelkan karena Anda tidak bisa menyalinnya sebagai Unicode. Saya pikir ada solusi untuk "salin sebagai Unicode" di suatu tempat di Mathematica.SE tetapi IIRC itu jauh dari sepele.
Martin Ender
11

Haskell, 32 , 30 byte

Solusi sederhana:

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

Dua byte disimpan oleh @Lynn

Michael Klein
sumber
f x=and[a+b/=c|a<-x,b<-x,c<-x]selama 30 byte.
Lynn
7

Julia, 18 byte

!x=x∩(x'.+x)==[]

Cobalah online!

Dennis
sumber
6

J, 18 10 8 byte

8 byte disimpan berkat mil, dan 2 berkat FrownyFrog!

-:]-.+/~

Cocokkan daftar asli dengan perbedaan set jumlah yang ditabulasi. Ini setara dengan:

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

untuk input y. Ini diterjemahkan menjadi:

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

+/~mengembalikan daftar jumlah menggunakan y. Sebab y =: 16 1 4 9, ini memberi:

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

Kemudian, kami menggunakan -., yang menghasilkan daftar yang terdiri dari semua elemen ytidak dalam tabel ini. Jika daftar ini bebas jumlah, ini akan menghasilkan daftar yang sama. Kemudian, -:periksa persamaan daftar, yang menghasilkan output yang diinginkan.

Lama, 18 byte

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

+/~membuat tabel nilai set yang ditambahkan ke dirinya sendiri, dan e.memeriksa apakah anggota tersebut di set asli. Sisanya meniadakan elemen maksimal.

Conor O'Brien
sumber
-:]-.&,+/~untuk 10 byte menggunakan perbedaan set -.dan pencocokan daftar-:
mil
Ooo, sangat bagus!
Conor O'Brien
Anda tidak perlu &, -.sudah bekerja dengan sel y.
FrownyFrog
@FrownyFrog Menarik, TIL. Terima kasih!
Conor O'Brien
5

Retina , 45 44 byte

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

Input adalah daftar desimal angka yang dipisahkan koma. Outputnya adalah 0(falsy) atau 1(truthy).

Cobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)

Penjelasan

Tahap 1: Substitusi

\d+
<$&$*1>

Ini mengkonversi semua elemen input menjadi unary dan membungkusnya <...>. Tujuan kurung sudut adalah untuk membedakan daftar yang hanya berisi 0dari daftar kosong (karena representasi unary dari 0kosong itu sendiri).

Tahap 2: Pergantian

$
$`$`

Kami mengulangi string 3 kali dengan menambahkannya dua kali di akhir.

Tahap 3: Cocokkan

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

Kami sekarang mencoba untuk menemukan tiga angka di hasil sehingga dua yang pertama menambahkan hingga yang ketiga. Kecocokan-kecocokan itu dihitung (ini sebenarnya tidak menghitung semua tupel seperti itu, karena kecocokan tidak dapat tumpang tindih, tetapi jika tupel seperti itu ada, itu akan ditemukan). Karenanya, kami mendapatkan 0set bebas-jumlah dan sesuatu yang positif sebaliknya.

Tahap 4: Cocokkan

^0

Karena tahap sebelumnya memberikan kebalikan dari apa yang kita inginkan, kita meniadakan hasilnya dengan menghitung kecocokan ^0yang 1untuk input 0dan 0untuk yang lainnya.

Martin Ender
sumber
5

Oktaf, 29 21 25 byte

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

Terima kasih kepada Suever ! Ini mengembalikan array. Saya menambahkan 0di akhir untuk []menjadi bebas-jumlah. Untuk memverifikasi kebenaran dan kepalsuan dalam Oktaf, Anda dapat melakukan ini:

> 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

Alternatif yang mengembalikan 0 atau 1 adalah:

@(s)~numel(intersect(s+s',s))
Marco
sumber
Anda dapat mengubahnya menjadi @(s)~ismember(s+s',s)karena array dapat berupa truey / falsey
Suever
5

Clojure, 47 37 byte

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

solusi yang cukup sederhana. menggunakan pemahaman daftar untuk menemukan semua elemen yang jumlahnya sama dengan elemen lain.

Varian 38 byte:

#(every? nil?(for[a % b %](%(+ a b))))
cliffroot
sumber
1
Karena dalam tantangan Anda mengambil set sebagai input, Anda dapat menggunakan set untuk memeriksa keanggotaan karena #(=(for[a % b % :when(%(+ a b))]a)[])dapat menyimpan 10 byte
mil
@miles oh wow, terima kasih, saya agak mengabaikan fakta itu dan bekerja dengan daftar.
cliffroot
4

Perl 6 ,  24 21 20  19 byte

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

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

Input adalah nilai Posisi apa pun seperti Daftar .
( Set adalah Asosiasi sehingga Anda harus memanggilnya .keys.)

Uji:

#! /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
Brad Gilbert b2gills
sumber
4

Mathematica 63 62 42 byte

Versi yang lebih pendek ini diuntungkan dari pengajuan A Simmons. Tidak ada elemen yang perlu dihapus dari daftar sebelum IntegerPartitionsditerapkan.

Jika suatu elemen tidak dapat dipartisi menjadi dua bilangan bulat (masing-masing dari daftar), maka IntegerPartitions[#,{2},#]=={}tahan. Andmemeriksa apakah ini berlaku untuk setiap elemen dalam daftar. Jika demikian, daftar ini bebas jumlah.

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

Contohnya

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

Salah


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

Benar


Ada 2, tetapi tidak ada angka ganjil yang berbeda dengan 2.

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

Benar

DavidC
sumber
Apakah Anda telah amenentukan tempat lain di buku kerja Anda? Ekspresi ini tidak memberikan output yang diinginkan ketika saya mengevaluasinya.
A Simmons
Terima kasih. Yang aseharusnya #. Saya memperbaikinya dan menghapus berlebihan @.
DavidC
3

Ruby, 36 byte

Bangun produk kartesius dari himpunan itu sendiri dan temukan jumlah semua elemen, lalu periksa persimpangan dengan himpunan asli. Input adalah array, tetapi di Ruby mereka memiliki operasi pengaturan yang cukup untuk membuatnya bekerja dengan baik.

-1 byte lebih dari solusi asli saya (digunakan &bukan -dan dibandingkan dengan []) karena inspirasi dari @feersum

Coba di sini!

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

Python, 40 byte

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

^ = perbedaan simetris, set baru dengan elemen di set baik tetapi tidak keduanya

> Benar jika set kiri adalah superset dari set kanan.

Lulhum
sumber
Ini tidak berfungsi untuk set kosong, meskipun saya tidak tahu apakah itu diperlukan.
xnor
1
Yah, wikipedia mengatakan (antara lain) itu A is sum-free if the equation a + b = c has no solution with a, b, c ∈ A. Dengan definisi ini, set kosong bukan jumlah bebas, dan jawaban saya benar. Tapi saya mungkin bias.
Lulhum
3
Definisi itu menyiratkan bahwa himpunan kosong adalah jumlah bebas, karena tidak ada a, b dan c dalam himpunan kosong yang memenuhi persamaan. OP test case yang baru ditambahkan mendukung ini.
Dennis
3

Brachylog , 13 byte

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

Penjelasan

'(          )  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
Fatalisasi
sumber
Apakah [2:2]himpunan bagian dari 2 elemen [2:4:9]?
Leaky Nun
@ LeakyNun Tidak, karena 2 hanya muncul sekali dalam [2:4:9].
Fatalkan
3

R, 39 36 byte

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

Sebut sebagai w(s), di mana sset (sebenarnya vektor) nilai. Ini adalah output untuk beberapa test case:

> 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

Di mana c()fungsi penggabungan yang mengambil banyak nilai dan menjadikannya vektor.

EDIT: Menjadikannya fungsi anonim untuk menyimpan 3 byte, terima kasih kepada @MickyT.

function(s)!any(outer(s,s,'+')%in%s)
Penipu
sumber
Sangat bagus. Anda dapat memposting ini sebagai fungsi yang tidak disebutkan namanya jika Anda mau. Itu akan menghemat 3 byte. misalnyafunction(s)!any(outer(s,s,'+')%in%s)
MickyT
3

Racket, 58 byte

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

Penjelasan:

(λ(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
Steven H.
sumber
3

05AB1E , 9 5 byte

Disimpan 4 byte berkat Magic Octopus Guci

ãOå_P

Cobalah online!

Penjelasan

ã       # cartesian product
 O      # sum
  å     # check each if it exists in input
   _    # logical negation
    P   # product
Emigna
sumber
Apakah 0 benar-benar jujur ​​di 05AB1E?
Dennis
@ Dennis Saya mendefinisikan 0 sebagai kebenaran untuk tantangan ini dan apa pun sebagai kepalsuan. Bukankah itu normal OK asalkan tidak ambigu dan OP belum menentukan format tertentu?
Emigna
Ini adalah interpretasi standar kami tentang kebenaran / kepalsuan.
Dennis
@ Dennis: Ah, sayang sekali. sum-free = 0 dan non-sum-free = "a sum" cocok untuk tantangan imo. Terlihat banyak tantangan lain yang mendefinisikan jumlah dan nilai non-standar yang sama sebagai benar / salah jadi saya pikir ketidak-ambiguan adalah default. Saya akan mengedit jawabannya. Terimakasih atas peringatannya.
Emigna
1
@MagicOctopusUrn: Terima kasih! Tidak yakin apakah perintah-perintah ini bekerja dengan cara seperti itu pada waktu itu, tetapi mereka melakukannya sekarang, terima kasih :) (Saya bisa saja melewatkannya juga, saya cukup baru di 05AB1E ketika saya melakukan tantangan ini)
Emigna
2

APL, 8 byte

⊢≡⊢~∘.+⍨

Penjelasan:

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

Uji:

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

Haskell, 30 byte

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

Saya pikir ada solusi yang lebih pendek yang lebih menarik, tetapi saya belum menemukannya.

Ini adalah 33 dan 34 byte:

f s=and$((/=)<$>s<*>)$(+)<$>s<*>s
f s|q<-((-)<$>s<*>)=all(/=0)$q$q$s
Tidak
sumber
apakah menggunakan elem sdan menyingkirkan bagian terakhir dari pekerjaan pemahaman?
Maltysen
@Maltysen Jika maksud Anda f s=and[notElem(x+y)s|x<-s,y<-s], itu 32. Ada juga f s=all(`notElem`s)$(+)<$>s<*>suntuk 31.
xnor
2

Sebenarnya , 7 byte

;;∙♂Σ∩Y

Cobalah online!

;;∙♂Σ∩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
Biarawati Bocor
sumber
Mungkin membuat kode Anda lebih setara gender? ( )
Erik the Outgolfer
1

TSQL, 47 byte

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

Catatan: Ini hanya akan berjalan sekali, maka tabel perlu dihapus atau dijatuhkan untuk berjalan lagi. Editor biola tidak mengizinkan pembuatan tabel. Oleh karena itu biola yang termasuk dalam jawaban saya menggunakan 2 byte tambahan untuk mengimbangi ini - versi biola tidak memerlukan pembersihan.

Biola

t-clausen.dk
sumber
1

Perl, 46 byte

45 byte kode + 1 byte command line (-p)

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

Menggunakan pertandingan regex tunggal dengan dukungan Perl untuk 'ekspresi kode' di dalam regex untuk memungkinkan evaluasi dalam pertandingan.

Untuk menyiasati persyaratan bahwa input tidak disortir, kami mengulangi string input tiga kali. Ini menjamin bahwa hasilnya adalah setelah kedua operan, dan memungkinkan digit yang sama untuk dicocokkan lagi (misalnya dalam hal input 2 4).

Contoh penggunaan:

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

Faktor, 47 byte

[ dup dup 2array [ Σ ] product-map ∩ { } = ]
  • ∩ { } =sama dengan tetapi lebih pendek dari intersects?.
  • Σlebih pendek dari tetapi setara dengan sum.

Terima kasih, math.unicode !

kode pengujian:

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

Saya hanya yakin dua yang pertama sudah benar. Tidak jelas dari pertanyaan apa yang seharusnya, jadi saya pikir tidak apa-apa untuk saat ini.

kucing
sumber
1

PHP, 73 byte

+8 untuk mengubah snippet menjadi program, -8 pada variabel usang berkat insertusername di sini

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

cetakan 1untuk true, keluaran kosong untuk false
penggunaan:php <filename> <value1> <value2> ...

fungsi yang memenuhi syarat untuk pengujian ( 94 86): pengembalian 1atau tidak sama sekali

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

tes

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));
}
Titus
sumber
1
Karena Anda tidak pernah menggunakan $idan $jAnda dapat membuang $i=>serta $j=>menyimpan 8 byte . Sayangnya cuplikan kode bukan jawaban yang valid. Jadikan fungsi atau program lengkap dan sertakan dalam hitungan byte Anda dan Anda siap untuk pergi. :)
masukkan nama pengguna di sini
1

Java, 67 byte

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

Masukan adalah a Set<Integer>. Tes:

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

Keluaran:

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]
David Conrad
sumber
1

Clojure, 34 byte

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

Saya menulis ini sebelum memperhatikan solusi Clojure sebelumnya. Bagaimanapun, yang ini lebih ringkas karena menggunakan set input sebagai predfungsi untuk not-any?.

NikoNyrh
sumber