Digamos que esta matriz es la cantidad de flexiones que he logrado cada día en los últimos 28 días:
[
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 puede ver, ha tomado una fuerte tendencia al alza en la última semana, y esa es la parte de estos datos que más me interesa. Cuanto más en el pasado sea, menos quiero que esos datos aparezcan en mi promedio 'número de flexiones.
Con ese fin, quiero calcular un "promedio" donde cada semana valga más que la semana anterior.
Información de antecedentes, no es parte de este problema.
Promedio normal:
La suma de todos los valores / el número de valores
Por arriba:
1440/28 = 51.42857142857143
Peso promedio:
Divida la matriz en 4 grupos de 7 y comience una nueva matriz.
- Agregue el primer grupo a la matriz.
- Agregue el segundo grupo a la matriz dos veces.
- Agregue el tercer grupo a la matriz tres veces.
- Agregue el cuarto grupo a la matriz cuatro veces.
Suma toda la nueva matriz y divide por la longitud de la nueva matriz.
Por arriba:
Convierta la matriz a esto:
[
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
]
Luego ejecute un promedio normal en esa matriz.
4310/70 = 61.57142857142857
Tenga en cuenta que es más alto que el valor promedio normal debido a la tendencia al alza en la última semana.
Las normas:
- La entrada es una matriz plana de 28 enteros no negativos.
- Cualquier idioma en el que te gustaría escribir.
- Salida de un número.
- Siempre me gusta ver enlaces TIO .
- Intenta resolver el problema en el menor número de bytes.
- El resultado debe ser un decimal exacto de al menos 4 decimales (ya sea truncado o redondeado a partir de los valores del caso de prueba está bien) o una fracción exacta.
Casos de prueba:
Caso 1: tendencia al alza
[
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
]
Promedio normal: 51.42857142857143 Promedio ponderado: 61.57142857142857
Caso 2: Dejando atrás la calma
(Tuve una mala semana, pero fue hace un tiempo)
[
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
]
Promedio normal: 40 Promedio ponderado: 42
Caso 3: Renunciar
Tuve una mala semana, está bajando mi promedio rápidamente.
[
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
]
Promedio normal: 40 Promedio ponderado: 34
Caso 4: promediando
Bien, solo estoy jugando por aquí, pensé que podría ser el mismo valor para los promedios normales y ponderados, pero, por supuesto, no 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
]
Promedio normal: 31.25 Promedio ponderado: 24.0
Problema de bonificación:
¿Qué combinación de 28 valores tendría el mismo promedio normal y promedio ponderado?
¡Feliz golf!
new_avg = α*weekly_sum + (1-α)*old_avg
para algunosα∈(0,1)
0
flexiones todos los días, por lo que mi promedio ponderado es el mismo que mi promedio normal.