Inspirado por una pregunta en Stack Overflow .
Dada una matriz no xentera de enteros y un entero positivo n, calcule la suma de cada bloque deslizante de longitud a lo nlargo 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-1entradas desplazadas circularmente; - el segundo bloque tiene las entradas primera y segunda
x, precedidas porn-2entradas desplazadas circularmente; y así.
La matriz de salida ytiene el mismo tamaño que x. Es posible nexceder la longitud de x, y luego los valores de xse 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
-2es la suma del bloque[0, -4, 2](los dos primeros valores provienen del desplazamiento circular)2es la suma de[-4, 2, 4](el primer valor proviene del desplazamiento circular)3es la suma de[2, 4, -3](ya no es necesario un desplazamiento circular)1es la suma de[4, -3, 0]-7es 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
7es la suma del bloque[1, 2, 1, 2, 1](los primeros cuatro valores se han reutilizado circularmente)8es 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]