Kebanyakan orang di sini mengenal Segitiga Pascal. Itu dibentuk oleh baris berturut-turut, di mana setiap elemen adalah jumlah dari dua tetangga kiri atas dan kanannya. Ini adalah 5
baris pertama (dipinjam dari segitiga Generate Pascal ):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Kita akan mengambil Pascal's Triangle dan melakukan beberapa penjumlahan di atasnya (hah-ha). Untuk input yang diberikan n
, hasilkan jumlah kolom dari n
baris pertama Segitiga Pascal. Misalnya, untuk input 5
, output akan dibentuk oleh
1
1 1
1 2 1
1 3 3 1
[+] 1 4 6 4 1
----------------------
1 1 5 4 9 4 5 1 1
Jadi hasilnya akan [1, 1, 5, 4, 9, 4, 5, 1, 1]
.
Perhatikan bahwa Anda tidak perlu membuat Segitiga Pascal untuk menghitung penjumlahan - itu terserah implementasi Anda jika lebih pendek untuk melakukannya atau tidak.
Memasukkan
Integer positif tunggal n
dengan n >= 1
format apa pun yang nyaman .
Keluaran
Array / daftar hasil penjumlahan kolom dari n
baris pertama segitiga Pascal, seperti diuraikan di atas. Sekali lagi, dalam format apa pun yang sesuai.
Aturan
- Leading atau trailing newlines atau whitespace semuanya opsional, asalkan karakter itu sendiri berbaris dengan benar.
- Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
- Jika memungkinkan, harap sertakan tautan ke lingkungan pengujian online agar orang lain dapat mencoba kode Anda!
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Contohnya
[input]
[output]
1
[1]
2
[1, 1, 1]
3
[1, 1, 3, 1, 1]
5
[1, 1, 5, 4, 9, 4, 5, 1, 1]
11
[1, 1, 11, 10, 54, 44, 155, 111, 286, 175, 351, 175, 286, 111, 155, 44, 54, 10, 11, 1, 1]
sumber
CJam ,
322524 byteTerima kasih kepada Luis Mendo karena telah menghemat 1 byte.
Cobalah online!
Penjelasan
sumber
JavaScript (ES6), 83 byte
Pengindeksan 1 biaya satu byte. Penjelasan:
g(j-1,i-1)+g(j-1,i+1)
secara rekursif menghitung segitiga Pascal sampai mencapai baris pertama, yang merupakan kasus dasar. Untuk mendapatkan jumlah kolom, saya menggunakan fakta yangmap
benar - benar melewati parameter ketiga, jadi ada langkah rekursif tambahan saat ini.sumber
JavaScript (ES6),
9087868482 byteDisimpan 3 byte berkat produk ETH
Uji kasus
Tampilkan cuplikan kode
sumber
Mathematica,
5957 byteTerima kasih kepada Martin Ender karena menemukan penghematan dua byte!
Fungsi murni mengambil input bilangan bulat positif dan mengembalikan daftar bilangan bulat. Secara harfiah menghasilkan semua entri yang relevan dari segitiga Pascal dan menjumlahkannya dengan tepat.
Kiriman sebelumnya (yang sedikit lebih mudah dibaca):
sumber
Oktaf ,
846745 byte22 byte disimpan berkat Neil !
Cobalah online!
Penjelasan
The
pascal
Fungsi memberikan matriks yang berisi nilai-nilai dalam segitiga Pascal:Untuk mengekstrak nilai yang diinginkan, kami membalik secara vertikal (
flip
), menjaga bagian segitiga bawah (tril
), dan membalik lagi. Ini memberispdiags
lalu ekstrak diagonal sebagai kolomdan
sum
menghitung jumlah setiap kolom, yang memberikan hasilnya.sumber
@(n)sum(spdiags(flip(tril(flip(pascal(n))))))
?05AB1E ,
3432282524 byte-4 Terima kasih kepada Emigna.
Cobalah online!
Pada dasarnya yang dilakukan adalah menghasilkan ini:
Ubah itu:
Kemudian jumlah setiap baris:
Jika 0 yang memimpin dan mengikuti tidak dapat diterima,
®>-Å
bukan®-Å
perbaikan untuk penalti +1 byte.Hasil untuk
50
:sumber
-Å0
alih-alih>-Ý0*
harus bekerja dan€
tidak diperlukan pada akhirnya.>F
bisa jadiƒ
.Å
, pintar! Saya menyimpan "ctrl + f" untuk "daftar identitas" atau sesuatu seperti itu diinfo.txt
heh ...13 x 5
menjadi5 x 11
? Ke mana dua kolom / baris lainnya pergi?PHP , 119 byte
nomor kolom dari 1-input ke input -1
Cobalah online!
sumber
array_column
adalah fungsi baru dalam versi iniarray_column()
.$x=2*$j++-$i
menghemat 7 byte. Looping $ j ke bawah alih-alih bisa menghemat 1 (for($j=$i+1;$j--;)
). Dan 3 byte lagi dapat di-golf dari output.array_column
Jelly , 12 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Python 3,
201184 bytesumber
Python 2 ,
140137 byteCobalah online! atau Coba online!
Untuk
n=3
Mulai dengan daftar dengan
n
angka nol mengelilingi angka satu -[[0, 0, 0, 1, 0, 0, 0]]
Hasilkan piramida lengkap
Putar 90º dan jumlah setiap baris, buang yang pertama dan yang terakhir (hanya nol)
sumber
Haskell,
118112104 byte614 byte disimpan berkat @nimisumber
#
ker#n|d<-0<$[1..n]=d++r++d
.#
, karena tidak rekursif lagi: tentukanf
sebagaif n=foldl1 z[d++p x++d|x<-[1..n],d<-[0<$[1..n-x]]]
dan buang#
.Python 3, 124 karakter
Ini menggunakan fakta bahwa Segitiga Pascal dapat didefinisikan dengan koefisien binomial. Saya mencoba menghapus
abs(x)
danrange(-n+1,n)
dengan membuatnyarange(n)
dan kemudian menggunakanlambda l:l[-1:0:-1]+l
tetapi lebih lama.Juga ini kali pertama saya bermain golf, jadi saya harap Anda memaafkan kecerobohan.
Binomial bukan milikku dan diambil dari sini .
sumber