Ispirato da una domanda a StackTranslate.it .
Dato un array non vuoto di numeri interi xe un numero intero positivo n, calcolare la somma di ciascun blocco scorrevole di lunghezza nlungo 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-1voci spostate in modo circolare; - il secondo blocco ha la prima e la seconda voce di
x, precedute dan-2voci spostate in modo circolare; e così via.
L'array di output yha le stesse dimensioni di x. È possibile nsuperare la lunghezza di x, quindi i valori di xvengono 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]