Digamos que essa matriz seja a quantidade de flexões que realizei todos os dias nos últimos 28 dias:
[
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
]
Como você pode ver, houve uma forte tendência de alta na última semana, e essa é a parte desses dados que mais me interessa. Quanto mais no passado, menos eu quero que esses dados apareçam na minha média 'número de flexões.
Para esse fim, quero elaborar uma "média" em que cada semana valha mais que a semana anterior.
Informações de plano de fundo, não fazem parte deste problema.
Média normal:
A soma de todos os valores / o número de valores
Para acima:
1440/28 = 51.42857142857143
Média ponderada:
Divida a matriz em 4 grupos de 7 e inicie uma nova matriz.
- Adicione o primeiro grupo à matriz.
- Adicione o segundo grupo à matriz duas vezes.
- Adicione o terceiro grupo à matriz três vezes.
- Adicione o quarto grupo à matriz quatro vezes.
Soma toda a nova matriz e divida pela duração da nova matriz.
Para acima:
Converta a matriz para isso:
[
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
]
Em seguida, execute uma média normal nessa matriz.
4310/70 = 61.57142857142857
Observe que é maior que o valor médio normal devido à tendência de alta na última semana.
As regras:
- A entrada é uma matriz plana de 28 números inteiros não negativos.
- Qualquer idioma em que você gostaria de escrever.
- Saída de um número.
- Eu sempre gosto de ver o TIO links .
- Tente resolver o problema no menor número de bytes.
- O resultado deve ser um decimal preciso com pelo menos 4 casas decimais (truncado ou arredondado dos valores dos casos de teste é bom) ou uma fração exata.
Casos de teste:
Caso 1: tendência ascendente
[
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
]
Média normal: 51.42857142857143 Média ponderada: 61.57142857142857
Caso 2: deixando a pausa para trás
(Eu tive uma semana ruim, mas foi há um tempo)
[
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
]
Média normal: 40 Média ponderada: 42
Caso 3: Desistir
Eu tive uma semana ruim, está diminuindo minha média rapidamente.
[
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
]
Média normal: 40 Média ponderada: 34
Caso 4: Média da média
Ok, então estou apenas brincando por aqui, pensei que poderia ser o mesmo valor para as médias normais e ponderadas, mas, é claro, não 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
]
Média normal: 31,25 Média ponderada: 24,0
Problema de bônus:
Que combinação de 28 valores teria a mesma média normal e média ponderada?
Feliz golfe!
new_avg = α*weekly_sum + (1-α)*old_avg
para algunsα∈(0,1)
0
flexões todos os dias, então minha média ponderada é igual à minha média normal.