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
untuk k
0-diindeks?
k
istilah pertama dari daftar bilangan alami berulang, bukan n*k
istilah pertama .