Diciamo che questo array è il numero di flessioni che ho realizzato ogni giorno negli ultimi 28 giorni:
[
20,20,20,30,30,30,30,
35,35,40,40,40,45,45,
50,50,50,50,50,50,50,
60,70,80,90,100,110,120
]
Come puoi vedere, ha avuto una forte tendenza al rialzo nell'ultima settimana, e questa è la parte di questi dati che mi interessa di più. Più in passato è, meno voglio che quei dati siano presenti nella mia 'media 'numero di flessioni.
A tal fine, voglio elaborare una "media" in cui ogni settimana valga più della settimana precedente.
Informazioni di base, non parte di questo problema.
Media normale:
La somma di tutti i valori / il numero di valori
Per sopra:
1440/28 = 51.42857142857143
Media ponderata:
Dividi l'array in 4 gruppi di 7 e avvia un nuovo array.
- Aggiungi il primo gruppo all'array.
- Aggiungi il secondo gruppo all'array due volte.
- Aggiungi il terzo gruppo all'array tre volte.
- Aggiungi il quarto gruppo all'array quattro volte.
Somma tutto il nuovo array e dividi per la lunghezza del nuovo array.
Per sopra:
Converti l'array in questo:
[
20,20,20,30,30,30,30, # first week once
35,35,40,40,40,45,45,
35,35,40,40,40,45,45, # second week twice
50,50,50,50,50,50,50,
50,50,50,50,50,50,50,
50,50,50,50,50,50,50, # third week thrice
60,70,80,90,100,110,120,
60,70,80,90,100,110,120,
60,70,80,90,100,110,120,
60,70,80,90,100,110,120 # Fourth week four times
]
Quindi eseguire una media normale su quell'array.
4310/70 = 61.57142857142857
Si noti che è superiore al valore medio normale a causa della tendenza al rialzo dell'ultima settimana.
Le regole:
- L'input è un array piatto di 28 numeri interi non negativi.
- Qualsiasi lingua in cui desideri scrivere.
- Emetti un numero.
- Mi piace sempre vedere i link TIO .
- Prova a risolvere il problema nel minor numero di byte.
- Il risultato dovrebbe essere un decimale accurato di almeno 4 cifre decimali (troncato o arrotondato per eccesso dai valori del test case va bene) o una frazione esatta.
Casi test:
Caso 1: tendenza al rialzo
[
20,20,20,30,30,30,30,
35,35,40,40,40,45,45,
50,50,50,50,50,50,50,
60,70,80,90,100,110,120
]
Media normale: 51.42857142857143 Media ponderata: 61.57142857142857
Caso 2: lasciare indietro la pausa
(Ho avuto una brutta settimana, ma è stato un po 'di tempo fa)
[
50,50,50,50,50,50,50,
10,10,10,10,10,10,10,
50,50,50,50,50,50,50,
50,50,50,50,50,50,50
]
Media normale: 40 Media ponderata: 42
Caso 3: arrendersi
Ho avuto una brutta settimana, sta abbassando velocemente la mia media.
[
50,50,50,50,50,50,50,
50,50,50,50,50,50,50,
50,50,50,50,50,50,50,
10,10,10,10,10,10,10
]
Media normale: 40 Media ponderata: 34
Caso 4: calcolo della media
Va bene, quindi sto solo giocando qui, ho pensato che potesse avere lo stesso valore per le medie normali e ponderate, ma, ovviamente, non lo era.
[
60,60,60,60,60,60,60,
30,30,30,30,30,30,30,
20,20,20,20,20,20,20,
15,15,15,15,15,15,15
]
Media normale: 31,25 Media ponderata: 24,0
Problema bonus:
Quale combinazione di 28 valori avrebbe la stessa media normale e media ponderata?
Buon golf!
new_avg = α*weekly_sum + (1-α)*old_avg
per alcuniα∈(0,1)
0
flessioni ogni giorno, quindi la mia media ponderata è la stessa della mia media normale.