Ispirato da una domanda a StackTranslate.it .
Dato un array non vuoto di numeri interi x
e un numero intero positivo n
, calcolare la somma di ciascun blocco scorrevole di lunghezza n
lungo l'array x
, riempiendo circolarmente i valori mancanti a sinistra con i valori da destra come segue:
- il primo blocco contiene la prima voce di
x
, preceduta dan-1
voci spostate in modo circolare; - il secondo blocco ha la prima e la seconda voce di
x
, precedute dan-2
voci spostate in modo circolare; e così via.
L'array di output y
ha le stesse dimensioni di x
. È possibile n
superare la lunghezza di x
, quindi i valori di x
vengono riutilizzati circolarmente più volte .
Esempi
Esempio 1 (i valori vengono riutilizzati una sola volta)
x = [2, 4, -3, 0, -4]
n = 3
dare come output
y = [-2, 2, 3, 1, -7]
dove
-2
è la somma del blocco[0, -4, 2]
(i primi due valori provengono dallo spostamento circolare)2
è la somma di[-4, 2, 4]
(il primo valore deriva dallo spostamento circolare)3
è la somma di[2, 4, -3]
(non è più necessario lo spostamento circolare)1
è la somma di[4, -3, 0]
-7
è la somma di[-3, 0, -4]
.
Esempio 2 (i valori vengono riutilizzati più volte)
x = [1, 2]
n = 5
dare
y = [7, 8]
dove
7
è la somma del blocco[1, 2, 1, 2, 1]
(i primi quattro valori sono stati riutilizzati in modo circolare)8
è la somma del blocco[2, 1, 2, 1, 2]
(i primi tre valori sono stati riutilizzati in modo circolare)
Regole aggiuntive
- L'algoritmo dovrebbe funzionare per matrici di dimensioni arbitrarie e per valori interi arbitrari. È accettabile se il programma è limitato dal tipo di dati o dalle restrizioni di memoria; ma devono essere gestiti valori interi positivi e negativi.
- L'input / output può essere preso / prodotto con qualsiasi mezzo ragionevole .
- Programmi o funzioni sono consentiti, in qualsiasi linguaggio di programmazione . Sono vietate le scappatoie standard .
- Vince il codice più breve in byte.
Casi test
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]