Diambil dari: OEIS- A071816
Tugas Anda, diberi batas atas n
, adalah untuk menemukan sejumlah solusi yang memenuhi persamaan:
a+b+c = x+y+z, where 0 <= a,b,c,x,y,z < n
Urutannya dimulai seperti yang dijelaskan pada halaman OEIS, dan seperti di bawah ini (1-diindeks):
1, 20, 141, 580, 1751, 4332, 9331, 18152, 32661, 55252, 88913, 137292, 204763, 296492, 418503, 577744, 782153, 1040724, 1363573, 1762004, 2248575, 2837164, 3543035, 4382904, 5375005, 6539156, 7896825, 9471196, 11287235, 13371756
Sebab n = 1
, hanya ada satu solusi:(0,0,0,0,0,0)
Sebab n = 2
, ada 20 solusi yang dipesan (a,b,c,x,y,z)
untuk a+b+c = x+y+z
:
(0,0,0,0,0,0), (0,0,1,0,0,1), (0,0,1,0,1,0), (0,0,1,1,0,0), (0,1,0,0,0,1),
(0,1,0,0,1,0), (0,1,0,1,0,0), (0,1,1,0,1,1), (0,1,1,1,0,1), (0,1,1,1,1,0),
(1,0,0,0,0,1), (1,0,0,0,1,0), (1,0,0,1,0,0), (1,0,1,0,1,1), (1,0,1,1,0,1),
(1,0,1,1,1,0), (1,1,0,0,1,1), (1,1,0,1,0,1), (1,1,0,1,1,0), (1,1,1,1,1,1).
I & O
- Input adalah bilangan bulat tunggal yang menunjukkan
n
. - Output adalah bilangan bulat tunggal / string yang menunjukkan
f(n)
, di manaf(...)
adalah fungsi di atas. - Pengindeksan persis seperti yang dijelaskan, tidak ada pengindeksan lain yang dapat diterima.
Ini adalah kode-golf , kemenangan byte-count terendah.
Jawaban:
Jelly ,
96 byteO (n 6 ) solusi.
Cobalah online!
Bagaimana itu bekerja
sumber
O(n^6)
: P.Mathematica 17 atau 76 Bytes
Menggunakan rumus:
(Disimpan 3 byte per @GregMartin dan @ngenisis)
Daripada menggunakan rumus, di sini saya benar-benar menghitung semua solusi dan menghitungnya.
sumber
11/20
dengan.55
penghematan dua byte.Haskell , 48 byte
Saya tidak memperhatikan formula sebelum menulis ini, jadi itu jelas bukan metode umum terpendek (atau tercepat), tapi saya pikir itu cantik.
Cobalah online!
f n
menghasilkan semua daftar dari 6 elemen dari[1..n]
, kemudian menghitung orang-orang yang jumlah bolak-baliknya 0. Menggunakan fakta yanga+b+c==d+e+f
sama dengana-(d-(b-(e-(c-f))))==0
, dan juga bahwa tidak masalah jika kita menambahkan 1 ke semua angka.sumber
MATL , 12 byte
Cobalah online!
Penjelasan
Saya tidak dapat melewatkan kesempatan untuk menggunakan konvolusi lagi!
Ini memanfaatkan karakterisasi berikut dari OEIS:
dan tentu saja penggandaan polinomial adalah konvolusi.
sumber
Jelly , 9 byte
Tidak sesingkat @ Dennis, tetapi selesai di bawah 20 detik untuk input
100
.Cobalah online!
Bagaimana itu bekerja
sumber
Pyth,
1312 byteDisimpan satu byte berkat Leaky Nun.
Penjelasan
sumber
/LJJ
sebagai gantinyam/JdJ
.Python 3 , 28 byte
Cobalah online!
sumber
TI-BASIC, 19 byte
Mengevaluasi formula OEIS.
sumber
Prompt x
= 2 byte?Oasis , 17 byte
Cobalah online!
Oasis adalah bahasa berbasis tumpukan yang dioptimalkan untuk urutan berulang. Namun, rumus rekursi akan terlalu lama untuk kasus ini.
sumber
Brachylog , 17 byte
Cobalah online!
Penjelasan
sumber
ᶜ
seharusnya secara otomatis datang dengan≜
ᶜ
sendiri, ini metapredicate.JavaScript, 24 byte
Menggunakan formula dari halaman OEIS.
Cobalah online!
sumber
x=>x**5*.55+x**3/4+x/5
Oktaf ,
252321 byteCobalah online!
Menggunakan formula dari entri OEIS. Menyimpan
duaempat byte dengan mengatur ulang formula dan menggunakan.55
alih-alih11/20
, berkat fəˈnɛtɪk.sumber
Python 2.7,
1091059996 byteTerima kasih ETHproductions dan Dennis untuk menghemat beberapa byte:
sumber
sum(sum(x[:3])==sum(x[3:])for x ...)
akan lebih pendek. Juga,from itertools import*
simpan satu byte.for
. Selain itu, kami tidak memerlukan fungsi untuk dinamai secara default, sehingga Anda dapat menghapush=
.Mathematica, 52 byte
Implementasi Kelly Lowder terhadap formula OEIS jauh lebih pendek, tetapi ini menghitung angka secara langsung:
Yah, itu sebenarnya menghitung jumlah solusi
1 <= a,b,c,x,y,z <= n
. Ini adalah angka yang sama, karena menambahkan 1 ke semua variabel tidak mengubah kesetaraan.Penjelasan:
Range@#~Tuples~6
buat semua daftar enam bilangan bulat antara 1 dan n,#~Partition~3&/@
pisahkan setiap daftar menjadi dua daftar dengan panjang 3, jumlahkan daftar-daftarTr/@
ini, danCount[...,{n_,n_}]
hitung berapa banyak pasangan yang memiliki jumlah yang sama. Saya sangat beruntung dengan urutan prioritas di antaraf @
,f /@
dan~f~
!sumber
Oktaf , 41 byte
Cobalah online!
Mirip dengan jawaban MATL saya , tetapi menghitung konvolusi melalui transformasi Fourier diskrit (
fft
) dengan jumlah poin yang cukup (n^2
).~~(1:n)
digunakan sebagai versi lebih pendek dariones(1,n)
.round
diperlukan karena kesalahan floating point.sumber
CJam , 17 byte
Input
11
waktu habis pada TIO, dan12
kehabisan memori yang lebih tinggi.Cobalah online!
Penjelasan
sumber
Clojure, 79 byte
Banyak pengulangan dalam kode, pada sejumlah besar variabel makro mungkin lebih pendek.
sumber