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 = 4
atau 4 + 9 = 13
ditambahkan 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}
Jawaban:
Pyth -
85 byteTerima kasih kepada @FryAmTheEggman karena telah menyelamatkan saya 3 byte.
Test Suite .
sumber
2 + 2 = 4
dari OP. Jawaban saya sebelum golf.C
FryAmTheEggman benar-benar menggunakan ombinasi dengan penggantian karena ini.Python 2, 41 byte
s
harus menjadi set Python.Fakta menyenangkan:
sum-free
adalah anagram nama saya.sumber
lambda s:not{a+b for a in s for b in s}&s
memiliki panjang yang sama. Sayangnya, saya tidak dapat menemukan cara untuk mempersingkat negasi.Jelly , 5 byte
Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript,
864241 byteTerima 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.some
tetapi itu tidak berhasil karena sayangnya fungsi prototipe. Mungkin ada solusi yang lebih baik denganArray.prototype.map
JS tetapi beberapa fungsi sangat menyenangkan.Saya sekarang bertanya-tanya apakah ada cara yang lebih singkat daripada
.includes
menggunakan sesuatu seperti .indexOf dan menambahkan 1 (yang akan memberikan nilai kebenaran jika berisi angka).Pengujian:
sumber
n=>n.some(m=>n.some(o=>n.some(p=>m+o==p)))
n.contains(o+p)
yang menghemat 2 byte di bagian terdalamsome
.includes
(awalnya akan dipanggilcontains
tetapi beberapa perpustakaan memiliki definisi yang bertentangan).MATL, 5 byte
Ini menghasilkan array yang benar jika semua entri
1
dan falsey sebaliknya. Berikut ini adalah demo untuk menunjukkan berbagai nilai kebenaran / kesalahan dalam MATL .Cobalah secara Online
Penjelasan
sumber
Mathematica, 23 Bytes
sumber
∩
dengan⋂
(U-22C2). Kode saat ini tidak dapat disalin ke dalam Mathematica.Haskell,
32, 30 byteSolusi sederhana:
Dua byte disimpan oleh @Lynn
sumber
f x=and[a+b/=c|a<-x,b<-x,c<-x]
selama 30 byte.Julia, 18 byte
Cobalah online!
sumber
J,
18108 byte8 byte disimpan berkat mil, dan 2 berkat FrownyFrog!
Cocokkan daftar asli dengan perbedaan set jumlah yang ditabulasi. Ini setara dengan:
untuk input
y
. Ini diterjemahkan menjadi:+/~
mengembalikan daftar jumlah menggunakany
. Sebaby =: 16 1 4 9
, ini memberi:Kemudian, kami menggunakan
-.
, yang menghasilkan daftar yang terdiri dari semua elemeny
tidak 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
+/~
membuat tabel nilai set yang ditambahkan ke dirinya sendiri, dane.
memeriksa apakah anggota tersebut di set asli. Sisanya meniadakan elemen maksimal.sumber
-:]-.&,+/~
untuk 10 byte menggunakan perbedaan set-.
dan pencocokan daftar-:
-.
sudah bekerja dengan sel y.Retina ,
4544 byteInput adalah daftar desimal angka yang dipisahkan koma. Outputnya adalah
0
(falsy) atau1
(truthy).Cobalah online! (Baris pertama memungkinkan suite tes yang dipisahkan dengan linefeed.)
Penjelasan
Tahap 1: Substitusi
Ini mengkonversi semua elemen input menjadi unary dan membungkusnya
<...>
. Tujuan kurung sudut adalah untuk membedakan daftar yang hanya berisi0
dari daftar kosong (karena representasi unary dari0
kosong itu sendiri).Tahap 2: Pergantian
Kami mengulangi string 3 kali dengan menambahkannya dua kali di akhir.
Tahap 3: Cocokkan
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
0
set bebas-jumlah dan sesuatu yang positif sebaliknya.Tahap 4: Cocokkan
Karena tahap sebelumnya memberikan kebalikan dari apa yang kita inginkan, kita meniadakan hasilnya dengan menghitung kecocokan
^0
yang1
untuk input0
dan0
untuk yang lainnya.sumber
Oktaf,
292125 byteTerima kasih kepada Suever ! Ini mengembalikan array. Saya menambahkan
0
di akhir untuk[]
menjadi bebas-jumlah. Untuk memverifikasi kebenaran dan kepalsuan dalam Oktaf, Anda dapat melakukan ini:Alternatif yang mengembalikan 0 atau 1 adalah:
sumber
@(s)~ismember(s+s',s)
karena array dapat berupa truey / falseyClojure,
4737 bytesolusi yang cukup sederhana. menggunakan pemahaman daftar untuk menemukan semua elemen yang jumlahnya sama dengan elemen lain.
Varian 38 byte:
sumber
#(=(for[a % b % :when(%(+ a b))]a)[])
dapat menyimpan 10 bytePerl 6 ,
24 21 2019 byteInput adalah nilai Posisi apa pun seperti Daftar .
( Set adalah Asosiasi sehingga Anda harus memanggilnya
.keys
.)Uji:
sumber
Mathematica
63 6242 byteVersi yang lebih pendek ini diuntungkan dari pengajuan A Simmons. Tidak ada elemen yang perlu dihapus dari daftar sebelum
IntegerPartitions
diterapkan.Jika suatu elemen tidak dapat dipartisi menjadi dua bilangan bulat (masing-masing dari daftar), maka
IntegerPartitions[#,{2},#]=={}
tahan.And
memeriksa apakah ini berlaku untuk setiap elemen dalam daftar. Jika demikian, daftar ini bebas jumlah.Contohnya
Salah
Benar
Ada 2, tetapi tidak ada angka ganjil yang berbeda dengan 2.
Benar
sumber
a
menentukan tempat lain di buku kerja Anda? Ekspresi ini tidak memberikan output yang diinginkan ketika saya mengevaluasinya.a
seharusnya#
. Saya memperbaikinya dan menghapus berlebihan@
.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 @feersumCoba di sini!
sumber
Python, 40 byte
^
= perbedaan simetris, set baru dengan elemen di set baik tetapi tidak keduanya>
Benar jika set kiri adalah superset dari set kanan.sumber
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.Brachylog , 13 byte
Penjelasan
sumber
[2:2]
himpunan bagian dari 2 elemen[2:4:9]
?[2:4:9]
.R,
3936 byteSebut sebagai
w(s)
, di manas
set (sebenarnya vektor) nilai. Ini adalah output untuk beberapa test case:Di mana
c()
fungsi penggabungan yang mengambil banyak nilai dan menjadikannya vektor.EDIT: Menjadikannya fungsi anonim untuk menyimpan 3 byte, terima kasih kepada @MickyT.
sumber
function(s)!any(outer(s,s,'+')%in%s)
Racket, 58 byte
Penjelasan:
sumber
05AB1E ,
95 byteDisimpan 4 byte berkat Magic Octopus Guci
Cobalah online!
Penjelasan
sumber
APL, 8 byte
Penjelasan:
Uji:
sumber
Haskell, 30 byte
Saya pikir ada solusi yang lebih pendek yang lebih menarik, tetapi saya belum menemukannya.
Ini adalah 33 dan 34 byte:
sumber
s
dan menyingkirkan bagian terakhir dari pekerjaan pemahaman?f s=and[notElem(x+y)s|x<-s,y<-s]
, itu 32. Ada jugaf s=all(`notElem`s)$(+)<$>s<*>s
untuk 31.Sebenarnya , 7 byte
Cobalah online!
sumber
♂
)TSQL, 47 byte
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
sumber
Perl, 46 byte
45 byte kode + 1 byte command line (-p)
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:
sumber
Faktor, 47 byte
∩ { } =
sama dengan tetapi lebih pendek dariintersects?
.Σ
lebih pendek dari tetapi setara dengansum
.Terima kasih, math.unicode !
kode pengujian:
Saya hanya yakin dua yang pertama sudah benar. Tidak jelas dari pertanyaan apa yang seharusnya, jadi saya pikir tidak apa-apa untuk saat ini.
sumber
PHP, 73 byte
+8 untuk mengubah snippet menjadi program, -8 pada variabel usang berkat insertusername di sini
cetakan
1
untuktrue
, keluaran kosong untukfalse
penggunaan:
php <filename> <value1> <value2> ...
fungsi yang memenuhi syarat untuk pengujian (
9486): pengembalian1
atau tidak sama sekalites
sumber
$i
dan$j
Anda 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. :)Java, 67 byte
Masukan adalah a
Set<Integer>
. Tes:Keluaran:
sumber
Clojure, 34 byte
Saya menulis ini sebelum memperhatikan solusi Clojure sebelumnya. Bagaimanapun, yang ini lebih ringkas karena menggunakan set input sebagai
pred
fungsi untuknot-any?
.sumber
Prolog (SWI) ,
665649 byteCobalah online!
sumber