Inspirado por una pregunta en Stack Overflow .
Dada una matriz no x
entera de enteros y un entero positivo n
, calcule la suma de cada bloque deslizante de longitud a lo n
largo de la matriz x
, llenando circularmente los valores faltantes a la izquierda con los valores de la derecha de la siguiente manera:
- el primer bloque contiene la primera entrada de
x
, precedida porn-1
entradas desplazadas circularmente; - el segundo bloque tiene las entradas primera y segunda
x
, precedidas porn-2
entradas desplazadas circularmente; y así.
La matriz de salida y
tiene el mismo tamaño que x
. Es posible n
exceder la longitud de x
, y luego los valores de x
se reutilizan circularmente varias veces .
Ejemplos
Ejemplo 1 (los valores se reutilizan solo una vez)
x = [2, 4, -3, 0, -4]
n = 3
dar como salida
y = [-2, 2, 3, 1, -7]
dónde
-2
es la suma del bloque[0, -4, 2]
(los dos primeros valores provienen del desplazamiento circular)2
es la suma de[-4, 2, 4]
(el primer valor proviene del desplazamiento circular)3
es la suma de[2, 4, -3]
(ya no es necesario un desplazamiento circular)1
es la suma de[4, -3, 0]
-7
es la suma de[-3, 0, -4]
.
Ejemplo 2 (los valores se reutilizan varias veces)
x = [1, 2]
n = 5
dar
y = [7, 8]
dónde
7
es la suma del bloque[1, 2, 1, 2, 1]
(los primeros cuatro valores se han reutilizado circularmente)8
es la suma del bloque[2, 1, 2, 1, 2]
(los primeros tres valores se han reutilizado circularmente)
Reglas adicionales
- El algoritmo debería funcionar para matrices de tamaño arbitrario y para valores enteros arbitrarios. Es aceptable si el programa está limitado por el tipo de datos o las restricciones de memoria; pero se deben manejar los valores enteros positivos y negativos.
- La entrada / salida se puede tomar / producir por cualquier medio razonable .
- Se permiten programas o funciones , en cualquier lenguaje de programación . Las lagunas estándar están prohibidas.
- El código más corto en bytes gana.
Casos de prueba
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]