Kebanyakan orang di sini mengenal Segitiga Pascal. Itu dibentuk oleh baris berturut-turut, di mana setiap elemen adalah jumlah dari dua tetangganya yang kiri atas dan kanan atas. 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
. . .
Perkecil baris ini ke kiri
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .
Sortir dalam urutan menaik
1
1 1
1 1 2
1 1 3 3
1 1 4 4 6
. . .
Baca segitiga ini dengan baris
[1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 4, 6 ...]
Diberikan input n
, output n
nomor th dalam seri ini. Ini adalah OEIS 107430 .
Aturan
- Anda dapat memilih pengindeksan berbasis 0 atau 1. Silakan sebutkan yang mana dalam kiriman Anda.
- Input dan output dapat dianggap sesuai dengan tipe integer asli bahasa Anda.
- Input dan output dapat diberikan dengan metode apa pun yang mudah .
- Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
code-golf
sequence
number-theory
AdmBorkBork
sumber
sumber
Jawaban:
JavaScript (ES6), 79 byte
Diindeks 0.
Demo
Tampilkan cuplikan kode
Bagaimana?
Algoritma ini secara langsung menghasilkan baris Segitiga Pascal yang diurutkan. Ini memperbarui n sesuai dengan panjang baris sebelumnya sampai [n] ada. Misalnya, 6 iterasi diperlukan untuk n = 19 :
sumber
Oktaf , 46 byte
Berbasis 1.
Cobalah online!
Penjelasan
Pertimbangkan
n=4
sebagai contoh.pascal(n)
memberikan matriks Pascal:Baris segitiga Pascal adalah antidiagonal dari matriks ini. Jadi dibalik menggunakan secara vertikal
flip(···)
yang mengubah antidiagonal menjadi diagonal.
spdiags(···)
mengekstrak diagonal (bukan nol), mulai dari kiri bawah, dan mengaturnya sebagai kolom berlapis-nol:M=sort(···)
mengurutkan setiap kolom dari matriks ini, dan memberikan hasilnya ke variabelM
:Pengindeksan logis
(···)(~~M)
sekarang digunakan untuk mengekstraksi nonzeros dari matriks ini dalam urutan kolom-utama (turun, lalu lintas). Hasilnya adalah vektor kolom:Akhirnya,
n
entri -th dari vektor ini diekstraksi menggunakan(···)(n)
, yang dalam hal ini memberi1
.sumber
Python 2 ,
867872 byte-8 byte terima kasih kepada Rod
Cobalah online!
Tidak disatukan
Cobalah online!
Fungsi secara rekursif menghitung deretan Pascal's Triangle. Mengingat baris saat ini sebagai
row
,map(sum, zip([0] + row, row + [0]))
.Pada setiap panggilan
n
dikurangi dengan panjang baris saat ini. Jika fungsi tiba di baris kanan,nth
jumlah baris terendah harus dikembalikan.Karena separuh pertama baris berada dalam urutan menaik dan setiap baris simetris, angkanya adalah pada indeks
n/2
(0-diindeks, pembagian integer).sumber
Bahasa Wolfram (Mathematica) , 55 byte
Pengindeksan adalah berbasis 1.
Cobalah online!
Penjelasan
Ini sepertinya golf, saya bukan pengguna Mathematica yang sangat berpengalaman.
Untuk setiap n ∈ [0, Input] ∩ ℤ , buat tabel binomial dengan masing-masing k ∈ [0, n] ∩ ℤ .
Sortir masing-masing. Menggunakan singkatan untuk
Map[function,object]
-function/@object
.Ratakan daftar yang dihasilkan dan ambil elemen yang indeks dalam daftar adalah input.
sumber
APL (Dyalog) ,
2625 byte1 byte disimpan berkat @ngn
Cobalah online!
sumber
{⍵[⍋⍵]}
->(⍋⊃¨⊂)
R , 58 byte
Cobalah online!
Menghitung
n choose k
untuk setiapn,k
di[0,1,...,n]
sebagai matriks, macam baris naik (*), dan menghilangkan nol, kemudian memilihn
elemen th.(*) Ini juga mengubahnya menjadi kolom tapi itu lebih baik karena R menyimpan matriks sebagai vektor berbentuk kolom, yang memungkinkan kita untuk mengindeks langsung ke dalamnya sambil menjaga ketertiban.
sumber
Haskell ,
143132125123 byteBaris pertama adalah fungsi point-free yang mengambil indeks (berbasis 0) dan mengembalikan nomor yang sesuai dalam urutan. Cobalah online!
Ini adalah program Haskell pertama saya! Saya yakin itu bisa menjadi jauh lebih pendek. Kiat dihargai.
Disimpan 2 byte berkat nimi
Tidak disatukan
sumber
i
fungsis
, yang diubah namanya menjadi!
, saya kira. Jika Anda menggunakan fungsi infiks Anda bisa drop()
sekitarreverse b
:s(a,b)=reverse b!a
.JavaScript, 57 byte
Diindeks 0.
Bagaimana ini terjadi:
Langkah 0:
Kode ini mudah dimengerti:
c
menghitung rumus Penggunaan kombinasi: C (n, k) = C (n-1, k) + C (n-1, k-1); atau 1 jika k == 0 atau k == nf
coba cari tahu nomor baris dan indeks di baris, lalu panggil fungsi c untuk mendapatkan hasilnya.Langkah 1:
Pada langkah ini, kita mencoba untuk memodifikasi panggilan fungsi
c
untukc(i,r)
yang membuatnya sama seperti parameterf
.Langkah 2:
Kami menguji
i<r
apakah menggunakan fungsif
atau fungsic
. Itu sebabnya kami musk terusi<r
memegang selama rekursi fungsic
.Langkah 3:
Pada langkah ini, kami menggabungkan kedua fungsi ini menjadi satu.
Setelah beberapa golf lagi, kami akhirnya mendapatkan jawaban yang dijelaskan di atas.
Tampilkan cuplikan kode
sumber
Jelly , 13 byte
Cobalah online!
Menggunakan algoritma Dyalog Uriel.
1-diindeks.
Penjelasan:
sumber
þ
sedang dilakukan di sini.JavaScript (Node.js) , 65 byte
Bahkan sebuah array pun tidak digunakan. Diindeks 0.
Cobalah online!
Penjelasan:
sumber
Pascal , 373 byte
g
adalah fungsinya.Cobalah online!
sumber
n=1 then
bisan=1then
.if(k=0)then
bisa menjadiif k=0then
.word
bukaninteger
.Java 8, 187 byte
Penjelasan:
Cobalah online.
sumber
MATL , 11 byte
Berbasis 1.
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Pertimbangkan input
4
sebagai contoh.;
adalah pemisah baris untuk matriks atau vektor kolom.sumber
Batch, 128 byte
Diindeks 0.
sumber
r
dan kolom ke%1-(s-2)
-%1
th dari seri. Baris keempat kemudian menggunakannya untuk menghitung koefisien binomial(n k) = n!/(n-k)!k!
=n(n-1)...(n+1-k)/(1)(2)...k
=(n/1)((n-1)/2)...((n+1-k)/k)
. Di mana MathJax ketika saya membutuhkannya?APL (Dyalog Classic) , 17 byte
Cobalah online!
Pengindeksan berbasis 0
perhatikan bahwa
(49!98) > 2*53
, yaitu koefisien binomial 98 lebih dari 49 lebih besar dari 2 53 , jadi pada saat itu Dyalog sudah mulai kehilangan presisi karena IEEE floating pointsumber
05AB1E , 10 byte
Diindeks 0
Cobalah online!
Penjelasan
sumber
Jelly , 11 byte
Cobalah online!
Tautan monadik yang mengambil indeks dan mengembalikan integer - menggunakan pengindeksan berbasis 1.
Bagaimana?
Melakukan tantangan cukup banyak seperti yang tertulis, hanya dengan lebih banyak hak segitiga Pascal (nol) yang kemudian dibuang ...
sumber
Merah , 206 byte
Berbasis 1
Cobalah online!
Penjelasan:
sumber
Perl, 48 byte
Termasuk
+1
untukp
Menggunakan pengindeksan basis 0.
sumber
J,
4641 byteDiindeks 0
Cobalah online!
Catatan:
<.2&!@,:^:_1
memberikan nomor baris yang relevan dari segitiga Pascal dengan membulatkan kebalikan dariy choose 2
./:~@(i.!<:)@]
menghitung baris dan mengurutkannya.[-2!]
memberikan indeks ke dalam baris.sumber
Julia , 70 byte
Berbasis 1
Penjelasan:
pertama menemukan nomor baris, lalu nomor kolom, kemudian menghitung binomial
sumber
Jelly , 17 byte
Cobalah online!
sumber
Pyth, 15 byte
Diindeks 0
Cobalah
Penjelasan
sumber
Bersih , 80 byte
Cobalah online!
Sebagai fungsi lambda.
sumber
Ruby , 56 byte
Berbasis 0
Pertama, dapatkan baris dan kolom dalam segitiga, lalu hitung koefisien binomial yang sesuai dengan posisi itu.
Cobalah online!
sumber
Sebenarnya , 8 byte
Sebagian besar didasarkan pada jawaban Jelly Jonathan Allan . Menggunakan pengindeksan 0.
Cobalah online!
Tidak melakukanolf
sumber
n
th dalam seri. Ini menghasilkan sebuah array.Kelapa , 69 byte
Cobalah online!
sumber
Pari / GP , 47 byte
Cobalah online!
sumber
C (gcc) ,
140123 byteCobalah online!
sumber