f n(k)を、各数値がn回繰り返される自然数[1、∞)の最初のk項の合計として定義しましょう。
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
正方配列としてのこの対角線は、OEISシーケンスA134546に似ています。
チャレンジ
2つの非負の整数nおよびkを取り、f n(k)を出力するプログラム/関数を作成します。
仕様書
- 標準のI / Oルールが 適用されます。
- 標準的な抜け穴は禁止されています。
- ソリューションには、nまたはk、あるいはその両方に対して0インデックスまたは1インデックスのいずれかを指定できますが、どちらを指定してください。
- この課題は、すべての言語で最短のアプローチを見つけることではなく、各言語で最短のアプローチを見つけることです。
- あなたのコードがされるバイト数で得点特に指定がない限り、通常はエンコーディングUTF-8で、。
- このシーケンスを計算する組み込み関数は許可されますが、組み込みに依存しないソリューションを含めることをお勧めします。
- 「実用的な」言語であっても説明が奨励されます。
テストケース
これらのテストケースでは、nは1から始まり、kは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
いくつかのより良い形式で:
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
リファレンス実装
これはHaskellで書かれています。
f n k = sum $ take k $ replicate n =<< [1..]
f_n(0) = 0
のためのk
インデックス0を?
k
項ではなく、繰り返される自然数のリストから最初の項のみを合計しますn*k
。