Mari kita mendefinisikan f n (k) sebagai jumlah dari suku pertama k dari bilangan asli [1, ∞) di mana setiap angka diulang n kali.
k | 0 1 2 3 4 5 6 7 8 9
--------+-------------------------------------------------
f_1(k) | 0 1 3 6 10 15 21 28 36 45
deltas | +1 +2 +3 +4 +5 +6 +7 +8 +9
--------+-------------------------------------------------
f_2(k) | 0 1 2 4 6 9 12 16 20 25
deltas | +1 +1 +2 +2 +3 +3 +4 +4 +5
--------+-------------------------------------------------
f_3(k) | 0 1 2 3 5 7 9 12 15 18
deltas | +1 +1 +1 +2 +2 +2 +3 +3 +3
Anti-diagonal ini sebagai larik persegi mirip dengan urutan OEIS A134546 .
Tantangan
Tulis program / fungsi yang mengambil dua bilangan bulat n-negatif dan k dan keluaran f n (k) .
Spesifikasi
- Aturan I / O standar berlaku .
- Celah standar yang dilarang .
- Solusi Anda dapat diindeks 0 atau 1 diindeks untuk n dan / atau k tetapi harap tentukan yang mana.
- Tantangan ini bukan tentang menemukan pendekatan terpendek dalam semua bahasa, melainkan tentang menemukan pendekatan terpendek dalam setiap bahasa .
- Kode Anda akan dinilai dalam byte , biasanya dalam pengkodean UTF-8, kecuali ditentukan lain.
- Fungsi built-in yang menghitung urutan ini diperbolehkan tetapi termasuk solusi yang tidak bergantung pada built-in dianjurkan.
- Penjelasan, bahkan untuk bahasa "praktis", dianjurkan .
Uji kasus
Dalam kasus uji ini, n adalah indeks-1 dan k adalah indeks-0.
n k fn(k)
1 2 3
2 11 36
11 14 17
14 21 28
21 24 27
24 31 38
31 0 0
Dalam beberapa format yang lebih baik:
1 2
2 11
11 14
14 21
21 24
24 31
31 0
1, 2
2, 11
11, 14
14, 21
21, 24
24, 31
31, 0
Implementasi referensi
Ini ditulis dalam Haskell .
f n k = sum $ take k $ replicate n =<< [1..]
f_n(0) = 0
untukk
0-diindeks?k
istilah pertama dari daftar bilangan alami berulang, bukann*k
istilah pertama .Jawaban:
Ruby ,
32 2823 byteCobalah online!
Penjelasan
Mari kita bayangkan jumlah sebagai luas segitiga, misalnya dengan n = 3 dan k = 10:
Kemudian kita menjumlahkan dengan kolom alih-alih baris: kolom pertama adalah
k
, laluk-n
,k-2n
dan seterusnya.sumber
Python 2 ,
3428 byteCobalah online!
Terima kasih Martin Ender, Neil, dan Tuan Xcoder karena telah membantu.
sumber
k/n
-k-(k/n)*n
hanya sajak%n
. Lihat jawaban Batch saya.Sekam , 4 byte
Cobalah online!
Penjelasan
Ini akhirnya menjadi terjemahan langsung dari implementasi referensi dalam tantangan:
sumber
APL (Dyalog) ,
12108 byteCobalah online!
n
di sebelah kiri,k
(0 diindeks) di sebelah kanan.sumber
Mathematica, 40 byte
Cobalah online!
Cobalah online!
Mathematica, 18 byte
oleh Martin Ender
Cobalah online!
Cobalah online!
sumber
Tr@Range[#2,0,-#]&
ataun~Sum~{n,#2,0,-#}&
menggunakan trik dari jawaban Ruby GB.MATL ,
1211 byteCobalah online!
k
diindeks 0. Mengambil input dalam urutan terbalik.Disimpan 1 byte berkat @Giuseppe
sumber
Jelly , 5 byte
Satu byte lebih dari solusi Jelly @ Mr.Xcoder tetapi ini adalah pengiriman pertama saya di Jelly dan saya masih bingung tentang bagaimana saksi Jelly memilih operan jadi saya masih puas. Perhatikan urutan input
k
kemudiann
.Penjelasan
Cobalah online!
sumber
Jelly , 4 byte
1-diindeks
Cobalah online! atau lihat test suite .
sumber
Ḷ:S
juga berfungsiJavaScript (ES6),
2421 byteMengambil input dalam sintaks currying
(n)(k)
. Mengembalikanfalse
bukan0
.Uji kasus
Tampilkan cuplikan kode
Bagaimana?
Ini mirip dengan jawaban Ruby @ GB .
Tantangannya menggambarkan bagaimana membangun 'tangga' dari kiri ke kanan, sedangkan fungsi rekursif ini membangunnya dari bawah ke atas. Dengan n = 2 dan k = 11 :
sumber
Batch, 34 byte
Formula bentuk tertutup yang saya temukan. Argumen pertama
n
adalah 1-diindeks, argumen keduak
adalah 0-diindeks.sumber
Python 2 , 29 byte
Cobalah online!
Terima kasih untuk benar-benar manusia untuk -3 byte!
Python 2 , 30 byte
Cobalah online!
sumber
Haskell , 28 byte
Cobalah online!
Suatu pendekatan yang saya temukan hanya dengan bermain-main dengan beberapa parameter rentang. Jelas bukan yang terpendek tetapi cukup keren bagaimana ada begitu banyak pendekatan yang berbeda.
sumber
C,
3834 byteDefinisi rekursif.
-4 Bytes berkat Steadybox .
Cobalah online!
32 byte oleh Mr. Xcoder , GB
Cobalah online!
sumber
f(n,k){return k--?1+f(n,k)+k/n:0;}
Cobalah online!R ,
373331 byte-6 byte terima kasih kepada Giuseppe
Cobalah online!
Tidak ada yang mewah.
The[0:k]
menangani kasus ketika k = 0.sumber
rep.default
, Anda dapat menyingkirkan[0:k]
dengan menggunakanrep(1:k,,k,n)
tetapi kemudian jawaban Anda pada dasarnya adalah rturnbull tetapi dengan basis R daripadaR + pryr
{}
C ++, 53 byte
Cukup gunakan formula.
n
1-diindeks dank
0-diindeks.Cobalah online!
sumber
~
operator.[](int n,int k){return-k/n*~(k/n)/2*n-k%n*~(k/n);};
J , 13 byte
Bagaimana itu bekerja:
Argumen kiri adalah n, kanan adalah k.
i.
menghasilkan daftar 0..k-11+
menambahkan satu ke setiap nomor dalam daftar, dengan 1,2, ..., k#
membentuk kait dengan yang di atas, jadi n salinan dari setiap elemen daftar disalin.]{.
ambil n pertama dari mereka1#.
temukan jumlah mereka dengan konversi basis.Cobalah online!
sumber
Retina ,
2926 byteCobalah online! Tautan mencakup test case dan header untuk memformatnya menjadi input yang disukai (0-diindeks
k
pertama, 1-diindeksn
kedua). Saya terinspirasi oleh jawaban Ruby @ GB. Penjelasan:Konversikan ke unary.
Cocokkan setiap string di
n
dalamk
, dan ganti kecocokan dengan semuanya setelah pertandingan. Ini adalahk-n
,k-2n
,k-3n
, tapin
juga setelah pertandingan, sehingga Anda mendapatkank
,k-n
,k-2n
dll Hal ini juga cocokn
, yang hanya dihapus (itu tidak lagi diperlukan).Jumlahkan hasilnya dan konversikan kembali ke desimal.
sumber
Pyth , 5 byte
Coba di sini!
Port of the Ruby menjawab. Port Jelly saya akan menjadi 6 byte:
+s/Rvz
sumber
Perl 6 , 39 byte
Menguji
n dan k keduanya berbasis 1
Diperluas:
sumber
Kotlin , 40 byte
Cobalah online!
sumber
Java (OpenJDK 8) , 23 byte
Cobalah online!
Port jawaban Python 2 GB .
sumber
05AB1E , 9 byte
Cobalah online!
Penjelasan
sumber
Python 2 , 44 byte
Cobalah online!
sumber
Python 2 , 38 byte
Cobalah online!
sumber
Clojure, 54 byte
Argumen 2
k
adalah 0-diindeks, demikian(f 14 20)
juga 28.sumber
APL + WIN, 13 byte
Meminta input layar untuk n dan kemudian untuk k. Indeks asal = 1.
sumber
Brain-Flak , 78 byte
Cobalah online!
Saya yakin ini bisa dilakukan lebih baik, tapi ini awal.
sumber
Japt ,
76 byteAwalnya terinspirasi oleh solusi GB dan berkembang menjadi sebuah port!
Dibawa
k
sebagai input pertama dann
sebagai input kedua.Cobalah
Penjelasan
Input bilangan bulat implisit
U=k
&V=n
. Hasilkan array bilangan bulat (õ
) dari1
hinggaU
dengan langkahV
negated (n
) dan menguranginya dengan penambahan (x
).sumber
R , 27 byte
Fungsi anonim yang mengambil
k
dann
dalam urutan itu. Membuat daftar panjangk
(argumen ketiga kerep
) yang terdiri dari1
throughk
(argumen pertama kerep
), mengulangi setiap elemenn
kali (argumen keempat kerep
). Kemudian ambil jumlah dari daftar itu.n
1-diindeks dank
0-diindeks. Mengembalikan kesalahan untukn<1
.Cobalah online!
sumber
Befunge, 27 Bytes
Cobalah secara Online
Mengambil k lalu n sebagai input. Menggunakan jawaban GB sebagai dasar matematisnya.
sumber