Ingatlah bahwa satu set tidak diurutkan tanpa duplikat.
Definisi Sebuah N -uniquely aditif set S yang panjangnya K adalah satu set sedemikian rupa sehingga semua N -Panjang subset di S sum ke nomor yang berbeda. Dengan kata lain, jumlah dari semua himpunan bagian panjang N dari S semuanya berbeda.
Objective Diberikan array / set sebagai input dan angka N
ke fungsi atau ke program lengkap dalam format yang masuk akal, menemukan dan mengembalikan atau menampilkan nilai yang benar atau salah (kesalahan untuk falsey tidak apa-apa) yang menunjukkan apakah input tersebut N - aditif unik.
Anda dapat mengasumsikan bahwa setiap elemen hanya muncul paling banyak satu kali dan bahwa setiap angka berada dalam tipe data asli bahasa Anda. Jika perlu, Anda juga dapat mengasumsikan bahwa input diurutkan. Terakhir, Anda dapat menganggap itu 0 < N <= K
.
Contohnya
Mari kita pertimbangkan set S = {1, 2, 3, 5}
dan N = 2
. Berikut ini semua jumlah semua pasangan unik S
(untuk yang unik adalah satu-satunya yang menarik untuk jumlah):
1 + 2 = 3
1 + 3 = 4
1 + 5 = 6
2 + 3 = 5
2 + 5 = 7
3 + 5 = 8
Kita dapat melihat bahwa tidak ada duplikat dalam output, jadi S adalah aditif 2-unik.
Sekarang mari kita pertimbangkan set T = {12, 17, 44, 80, 82, 90}
dan N = 4
. Berikut ini semua jumlah panjang yang mungkin dari empat:
12 + 17 + 44 + 80 = 153
12 + 17 + 44 + 82 = 155
12 + 17 + 44 + 90 = 163
12 + 17 + 80 + 82 = 191
12 + 17 + 80 + 90 = 199
12 + 17 + 82 + 90 = 201
12 + 44 + 80 + 82 = 218
12 + 44 + 80 + 90 = 226
12 + 44 + 82 + 90 = 228
12 + 80 + 82 + 90 = 264
17 + 44 + 80 + 82 = 223
17 + 44 + 80 + 90 = 231
17 + 44 + 82 + 90 = 233
17 + 80 + 82 + 90 = 269
44 + 80 + 82 + 90 = 296
Mereka semua unik, dan T adalah aditif 4-unik.
Uji Kasus
[members], N => output
[1, 4, 8], 1 => true
[1, 10, 42], 1 => true ; all sets trivially satisfy N = 1
[1, 2, 3, 4], 3 => true
[1, 2, 3, 4, 5], 5 => true
[1, 2, 3, 5, 8], 3 => true
[1, 2, 3, 4, 5], 2 => false ; 1 + 4 = 5 = 2 + 3
[-2, -1, 0, 1, 2], 3 => false ; -2 + -1 + 2 = -1 = -2 + 0 + 1
[1, 2, 3, 5, 8, 13], 3 => false ; 1 + 2 + 13 = 16 = 3 + 5 + 8
[1, 2, 4, 8, 16, 32], 3 => true
[1, 2, 4, 8, 16, 32], 4 => true
[1, 2, 4, 8, 16, 32], 5 => true
[1, 2, 4, 8, 16, 32], 6 => true
[3, 4, 7, 9, 12, 16, 18], 6 => true
[3, 4, 7, 9, 12, 16, 18], 3 => false ; 3 + 4 + 12 = 19 = 3 + 7 + 9
sumber
N <= K
?falsey
?Jawaban:
MATL , 7 byte
Cobalah online!
Mengembalikan
true
(ditampilkan sebagai1
) ataufalse
(ditampilkan sebagai0
).sumber
Jelly, 7 byte
Cobalah online!
Mengembalikan angka positif untuk kebenaran dan nol untuk falsey.
sumber
Matlab, 78 byte
Fungsi ini mengembalikan nilai positif (pada kenyataannya
n
) untuk kebenaran dan mengembalikan kesalahan sebagai jawaban palsu (valid menurut komentar ini )Penjelasan:
sumber
k
. PS: Penyorotan sintaksis Matlab akhirnya bekerja !!!n
!Pyth, 8 byte
Suite uji.
sumber
splat
artinyaQ
pada akhirnya.Haskell, 69 byte
Contoh penggunaan:
6 # [3,4,7,9,12,16,18]
->True
.Implementasi langsung dari definisi: buat daftar jumlah semua urutan panjang n dan periksa apakah sama dengan duplikat yang dihapus.
sumber
JavaScript (ES6), 132 byte
Buat daftar aditif dari 1 hingga n dan kemudian periksa yang terakhir untuk keunikan.
sumber
Brachylog , 20 byte
Mengharapkan daftar yang berisi daftar dan kemudian bilangan bulat sebagai Input, dan tidak ada Output, misalnya
run_from_atom(':{[L:I]hs.lI}f:+aLdL', [[1:2:3:5]:2]).
.Penjelasan
Predikat Utama
Predikat 1: Temukan semua himpunan bagian yang dipesan dengan panjang yang tetap dari suatu daftar
sumber
Julia,
4641 byteCobalah online!
Bagaimana itu bekerja
Ini (kembali) mendefinisikan operator biner
\
untuk argumen Array / Int.combinations(x,n)
mengembalikan semua array dengan tepat n elemen x yang berbeda . Kami memetakan disum
atas array ini dan menyimpan hasilnya di t .t∪t
melakukan penyatuan set array t dengan dirinya sendiri, yang bekerja seperti lebih lamaunique
dalam kasus ini.Akhirnya, kami membandingkan t dengan deduplicated t , mengembalikan
true
jika dan hanya jika semua jumlah berbeda.sumber
Python, 89 byte
Uji di Ideone .
Bagaimana itu bekerja
c(s,n)
daftar semua n -kombinasi s , yaitu, semua daftar n elemen s . Kami memetakansum
daftar yang dihasilkan, sehingga menghitung semua jumlah yang mungkin dari daftar panjang n .Setelah bangsal, kami gunakan
c(...,2)
untuk membuat semua pasangan jumlah yang dihasilkan. Jika ada dua jumlah x dan y yang sama,x^y
akan mengembalikan 0 danall
akan mengembalikan False . Sebaliknya, jika semua jumlah adalah unik,x^y
akan selalu benar, danany
akan mengembalikan Benar .sumber
J, 34 byte
Pendekatan straight-forward, hanya membutuhkan
stats
add-on untukcomb
fungsi tersebut. Pengembalian0
untuk false dan1
true.Sebagai alternatif untuk menggunakan
comb
builtin, ada solusi 38 byte yang menghasilkan set daya dan memilih subset ukuran n .Pemakaian
sumber
stats
modul. Sangat bagus!Ruby , 50 byte
Cobalah online!
Jika semua elemen unik,
uniq!
kembalinil
. Meniadakan hasil itu, seperti dalam!(...).uniq!
membuat untuk tes keunikan yang bagus.Pertanyaan ini diposting beberapa minggu sebelum Ruby 2.4.0-preview1, yang diperkenalkan
Enumerable#sum
, yang akan menghemat 9 byte di sini.41 byte (Ruby 2.4+)
Cobalah online!
sumber
R , 41 byte
Jumlah semua himpunan bagian panjang s dan periksa apakah semua nilai dalam tabel kontingensi dari jumlah ini adalah 1 (semua jumlah adalah unik).
Cobalah online!
sumber