Si nous avons une liste, disons la liste [9, 2, 4, 4, 5, 5, 7]
, nous pouvons faire une moyenne mobile à travers elle.
En prenant une fenêtre de disons, 3 éléments, chaque élément est remplacé par une fenêtre comme celle-ci:, [[9], [9, 2], [9, 2, 4], [2, 4, 4], [4, 4, 5], [4, 5, 5], [5, 5, 7]]
puis en prenant des moyennes, nous obtenons[9.0, 5.5, 5.0, 3.3333333333333335, 4.333333333333333, 4.666666666666667, 5.666666666666667]
.
Assez simple jusqu'à présent. Mais une chose que vous pouvez remarquer à ce sujet est que prendre une moyenne mobile "lisse" la liste. Cela soulève donc la question: combien de fois faut-il prendre une moyenne mobile pour rendre la liste "assez lisse"?
Ta tâche
Étant donné une liste de flottants, une taille de fenêtre entière et un flottant, affichez combien de fois il faut prendre la moyenne mobile pour obtenir l'écart-type inférieur à ce flottant. Pour ceux qui ne le savent pas, l'écart-type mesure le manque de fluidité d'un ensemble de données et peut être calculé par la formule suivante:
Par exemple, en utilisant notre liste précédente et un max stddev de .5
, nous obtenons des 8
itérations qui ressemblent à ceci:
[9.0, 5.5, 5.0, 3.3333333333333335, 4.333333333333333, 4.666666666666667, 5.666666666666667]
[9.0, 7.25, 6.5, 4.6111111111111116, 4.2222222222222223, 4.1111111111111107, 4.8888888888888893]
[9.0, 8.125, 7.583333333333333, 6.1203703703703702, 5.1111111111111107, 4.3148148148148149, 4.4074074074074074]
[9.0, 8.5625, 8.2361111111111107, 7.2762345679012341, 6.2716049382716044, 5.1820987654320989, 4.6111111111111107]
[9.0, 8.78125, 8.5995370370370363, 8.024948559670781, 7.2613168724279831, 6.2433127572016458, 5.3549382716049374]
[9.0, 8.890625, 8.7935956790123466, 8.4685785322359397, 7.9619341563786001, 7.1765260631001366, 6.2865226337448554]
[9.0, 8.9453125, 8.8947402263374489, 8.7175997370827627, 8.4080361225422955, 7.8690129172382264, 7.141660951074531]
[9.0, 8.97265625, 8.9466842421124824, 8.8525508211400705, 8.6734586953208357, 8.3315495922877609, 7.8062366636183507]
et terminer avec un stdev de 0.40872556490459366
. Vous venez de sortir 8
.
Mais il y a un hic:
La réponse ne doit pas être non négative! Si la liste initiale satisfait déjà le stddev maximum, vous devez voir combien d'itérations vous pouvez "reculer" et défaire la moyenne mobile et que la liste satisfasse toujours le stddev max. Étant donné que nous tronquons les fenêtres pour les n
points de données initiaux et ne les supprimons pas, il y a suffisamment de données pour inverser une moyenne mobile.
Par exemple, si nous commençons avec la liste [9.0, 8.99658203125, 8.9932148677634256, 8.9802599114806494, 8.9515728374598496, 8.8857883675880771, 8.7558358356689627]
(tirée de notre exemple précédent avec 3 moyennes mobiles supplémentaires) et la même taille de fenêtre et max stddev, vous afficherez -3
car vous pouvez inverser la moyenne mobile la plupart du 3
temps.
Tout format d'E / S raisonnable convient.
C'est le code-golf donc le code le plus court en octets gagne!
Cas de test
[9, 2, 4, 4, 5, 5, 7], 3, .5 -> 8
[9, 2, 4, 4, 5, 5, 7], 3, .25 -> 9
[9.0, 8.99658203125, 8.9932148677634256, 8.9802599114806494, 8.9515728374598496, 8.8857883675880771, 8.7558358356689627], 3, .5 -> -3
[1000, 2, 4, 4, 5, 5, 7], 7, .25 -> 13
[1000.0, 999.98477172851563, 999.96956668760447, 999.95438464397, 999.90890377378616, 999.83353739825293, 999.69923168916694], 4, 7 -> -6