Nota: questo è il n. 3 in una serie di sfide di manipolazione di array . Per la sfida precedente, fai clic qui .
Media mobile di un elenco
La media mobile di un elenco è un calcolo che risulta in un nuovo elenco smussato, creato dalla media di piccoli elenchi sovrapposti dell'originale.
Quando creiamo una media mobile, per prima cosa generiamo l'elenco di liste secondarie sovrapposte utilizzando una certa "dimensione della finestra", spostando questa finestra a destra una volta ogni volta.
Ad esempio, dati l'elenco [8, 4, 6, 2, 2, 4]
e le dimensioni della finestra 3
, le liste secondarie sarebbero:
[8, 4, 6, 2, 2, 4] Sublists:
( ) <- [8, 4, 6]
( ) <- [4, 6, 2]
( ) <- [6, 2, 2]
( ) <- [2, 2, 4]
Calcoliamo quindi la media media di ciascun elenco secondario per ottenere il risultato: [6.0, 4.0, 3.3, 2.7]
(ogni valore arrotondato al primo decimale).
La sfida
Il tuo compito è scrivere un programma o una funzione che, dato un elenco L e un numero intero 1 ≤ n ≤ lunghezza (L) , calcolino la media mobile per L usando la dimensione della finestra n .
Regole:
- Il programma può utilizzare la divisione intera o la divisione float. Nel caso della divisione float, sono consentite piccole imprecisioni dovute alle limitazioni del tipo di dati, purché il valore sia altrimenti corretto.
- Puoi inviare un programma completo o una funzione (ma non uno snippet).
- Si può presumere che l'elenco conterrà solo numeri interi positivi .
- Sono vietate le scappatoie standard.
- Questo è code-golf , quindi vince la risposta più breve (in byte)!
Casi test
Si noti che, per facilità di leggibilità, tutti i valori sono arrotondati al primo decimale.
n=5, [1, 2, 3, 4, 5, 6, 7, 8] -> [3, 4, 5, 6]
n=3, [100, 502, 350, 223, 195] -> [317.3, 358.3, 256]
n=1, [10, 10, 10] -> [10, 10, 10]
n=3, [10, 20, 30] -> [20]
n=2, [90, 40, 45, 100, 101] -> [65, 42.5, 72.5, 100.5]