空ではない整数の配列x
と正の整数n
を指定すると、配列に沿った長さの各スライドブロックの合計を計算し、次のように左の欠損値を右からの値で循環充填します。n
x
- 最初のブロックには、循環シフトエントリ
x
が先行するの最初のエントリが含まれn-1
ます。 - 2番目のブロックには、の最初と2番目のエントリがあり
x
、その前にn-2
循環シフトエントリがあります。等々。
出力配列のy
サイズはと同じx
です。n
の長さを超えることは可能x
で、その後、の値x
は循環的に数回再利用されます。
例
例1(値は1回だけ再利用されます)
x = [2, 4, -3, 0, -4]
n = 3
出力として与える
y = [-2, 2, 3, 1, -7]
どこで
-2
ブロックの合計です[0, -4, 2]
(最初の2つの値は循環シフトから取得されます)2
の合計です[-4, 2, 4]
(最初の値は循環シフトから取得されます)3
の合計です[2, 4, -3]
(循環シフトはもう必要ありません)1
の合計です[4, -3, 0]
-7
はの合計です[-3, 0, -4]
。
例2(値は数回再利用されます)
x = [1, 2]
n = 5
与える
y = [7, 8]
どこで
7
ブロックの合計です[1, 2, 1, 2, 1]
(最初の4つの値は循環的に再利用されています)8
ブロックの合計です[2, 1, 2, 1, 2]
(最初の3つの値は循環的に再利用されています)
追加のルール
- このアルゴリズムは、任意のサイズの配列および任意の整数値に対して機能するはずです。プログラムがデータ型またはメモリ制限によって制限されている場合は許容できます。ただし、正の整数値と負の整数値を処理する必要があります。
- 入力/出力は、任意の合理的な手段で取得/生成できます。
- すべてのプログラミング言語でプログラムまたは機能を使用できます。標準的な抜け穴は禁止されています。
- バイト単位の最短コードが優先されます。
テストケース
x, n, -> y
[2, 4, -3, 0, -4], 3 -> [-2, 2, 3, 1, -7]
[1, 2], 5 -> [7, 8]
[2], 7 -> [14]
[-5, 4, 0, 1, 0, -10, -4], 4 -> [-19, -15, -5, 0, 5, -9, -13]
[-5, 4, 0, 1, 0, -10, -4], 1 -> [-5, 4, 0, 1, 0, -10, -4]
[-2, -1, 0, 1, 2, 3], 5 -> [4, 3, 2, 1, 0, 5]
[-10, 0, 10], 4 -> [-10, 0, 10]