Inspirado por uma pergunta no Stack Overflow .
Dada uma matriz não vazia de números inteiros x
e um número inteiro positivo n
, calcule a soma de cada bloco deslizante de comprimento n
ao longo da matriz x
, preenchendo circularmente os valores ausentes à esquerda com valores da direita da seguinte maneira:
- o primeiro bloco contém a primeira entrada de
x
, precedida porn-1
entradas deslocadas circularmente; - o segundo bloco possui a primeira e a segunda entradas de
x
, precedidas porn-2
entradas deslocadas circularmente; e assim por diante.
A matriz de saída y
tem o mesmo tamanho que x
. É possível n
exceder o comprimento de x
e, em seguida, os valores de x
são circularmente reutilizados várias vezes .
Exemplos
Exemplo 1 (os valores são reutilizados apenas uma vez)
x = [2, 4, -3, 0, -4]
n = 3
dar como saída
y = [-2, 2, 3, 1, -7]
Onde
-2
é a soma do bloco[0, -4, 2]
(os dois primeiros valores vêm do deslocamento circular)2
é a soma de[-4, 2, 4]
(o primeiro valor vem do deslocamento circular)3
é a soma de[2, 4, -3]
(não é mais necessário o deslocamento circular)1
é a soma de[4, -3, 0]
-7
é a soma de[-3, 0, -4]
.
Exemplo 2 (os valores são reutilizados várias vezes)
x = [1, 2]
n = 5
dar
y = [7, 8]
Onde
7
é a soma do bloco[1, 2, 1, 2, 1]
(os quatro primeiros valores foram reutilizados circularmente)8
é a soma do bloco[2, 1, 2, 1, 2]
(os três primeiros valores foram reutilizados circularmente)
Regras adicionais
- O algoritmo deve funcionar para matrizes de tamanho arbitrário e para valores inteiros arbitrários. É aceitável se o programa for limitado por tipo de dados ou restrições de memória; mas valores inteiros positivos e negativos devem ser manipulados.
- A entrada / saída pode ser obtida / produzida por qualquer meio razoável .
- Programas ou funções são permitidos, em qualquer linguagem de programação . As brechas padrão são proibidas.
- O menor código em bytes vence.
Casos de teste
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]