Disons que ce tableau est le nombre de pressions que j'ai réalisées chaque jour au cours des 28 derniers jours:
[
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
]
Comme vous pouvez le voir, il y a eu une forte tendance à la hausse la semaine dernière, et c'est la partie de ces données qui m'intéresse le plus. Plus loin dans le passé, moins je veux que ces données figurent dans ma moyenne 'nombre de presses.
À cette fin, je veux établir une «moyenne» où chaque semaine vaut plus que la semaine précédente.
Les informations générales ne font pas partie de ce problème.
Moyenne normale:
La somme de toutes les valeurs / le nombre de valeurs
Pour ci-dessus:
1440/28 = 51,42857142857143
Moyenne pondérée:
Divisez le tableau en 4 groupes de 7 et démarrez un nouveau tableau.
- Ajoutez le premier groupe au tableau.
- Ajoutez le deuxième groupe au tableau deux fois.
- Ajoutez le troisième groupe au tableau trois fois.
- Ajoutez le quatrième groupe au tableau quatre fois.
Additionnez tout le nouveau tableau et divisez par la longueur du nouveau tableau.
Pour ci-dessus:
Convertissez le tableau en ceci:
[
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
]
Exécutez ensuite une moyenne normale sur ce tableau.
4310/70 = 61,57142857142857
Notez qu'il est supérieur à la valeur moyenne normale en raison de la tendance à la hausse de la semaine dernière.
Les règles:
- L'entrée est un tableau plat de 28 entiers non négatifs.
- N'importe quelle langue dans laquelle vous souhaitez écrire.
- Sortez un nombre.
- J'aime toujours voir les liens TIO .
- Essayez de résoudre le problème dans le plus petit nombre d'octets.
- Le résultat doit être une décimale précise à au moins 4 décimales (tronquée ou arrondie à partir des valeurs du scénario de test est très bien) ou une fraction exacte.
Cas de test:
Cas 1: tendance à la hausse
[
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
]
Moyenne normale: 51,42857142857143 Moyenne pondérée: 61,57142857142857
Cas 2: Laisser l'accalmie derrière
(J'ai eu une mauvaise semaine, mais c'était il y a longtemps)
[
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
]
Moyenne normale: 40 Moyenne pondérée: 42
Cas 3: abandonner
J'ai eu une mauvaise semaine, ça fait baisser ma moyenne rapidement.
[
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
]
Moyenne normale: 40 Moyenne pondérée: 34
Cas 4: Moyenne sur
D'accord, donc je joue juste ici, je pensais que ce pourrait être la même valeur pour les moyennes normales et pondérées, mais, bien sûr, ce n'était pas le cas.
[
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
]
Moyenne normale: 31,25 Moyenne pondérée: 24,0
Problème bonus:
Quelle combinaison de 28 valeurs aurait la même moyenne normale et la même moyenne pondérée?
Bon golf!
la source
new_avg = α*weekly_sum + (1-α)*old_avg
pour certainsα∈(0,1)
0
des tractions tous les jours, donc ma moyenne pondérée est la même que ma moyenne normale.Réponses:
Husk , 6 octets
Essayez-le en ligne!
Utilise l'astuce que Dennis a utilisé pour surpasser ma soumission Jelly. Au lieu de répéter chaque bloc N fois, il récupère les suffixes de la liste des blocs, ce qui après l'aplatissement donnera le même résultat, à l'exception de l'ordre.
la source
Python 3 , 38 octets
Essayez-le en ligne!
la source
05AB1E ,
87 octets1 octet enregistré grâce à M. Xcoder
Essayez-le en ligne!
Explication
la source
Gelée , 7 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
x"J$
est donc équivalent àṫJ
dans ce contexte. Intéressant!R + pryr,
3228 octetset le même score moyen semaine par semaine entraînerait l'égalité des moyennes.
Essayez-le en ligne!
Économisé 4 octets en utilisant le produit scalaire grâce à Giuseppe .
Pure R aurait deux octets supplémentaires en utilisant
function
la source
sum
function(s)weighted.mean(s,rep(1:4,e=7))
weighted.mean
. J'adore quand lesR
golfeursPython
.MATL , 10 octets
Essayez-le en ligne!
Je n'ai pas posté de réponse MATL depuis des lustres! J'ai pensé que je pourrais participer dans le cadre de pensé LOTM mai 2018 !
Explication:
la source
K:7Y"*s70/
10 octets.Gelée , 9 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Haskell , 35 octets
Bonus: si ce
a,b,c,d
sont les sommes hebdomadaires, la moyenne normale est la même que la moyenne pondérée ssi:Une solution est lorsque la première et la dernière semaine ont les mêmes sommes, ainsi que la deuxième et la troisième semaines ont la même somme, mais il existe une infinité de solutions si vos biceps sont à la hauteur. Exemple: [15,10,10,10,10,10,5,20,20,20,25,25,20,20,30,20,20,20,20,20,20,10,10,20 , 0,10,10,10]
Essayez-le en ligne!
la source
JavaScript (Node.js) , 49 octets
Essayez-le en ligne!
Solution non générique
JavaScript (Node.js) ,
3936 octetsEssayez-le en ligne!
la source
a=>a.reduce((s,x,i)=>(I+=d=-~(i/7),s+x*d),I=0)/I
. Et un petit conseil: utilisez<hr>
pour créer une ligne horizontale dans le démarque---
(a besoin de son propre paragraphe)?Stax , 6 octets
Exécutez-le et déboguez-le sur staxlang.xyz!
Déballé (7 octets) et explication:
la source
Stax ,
108 octetsExécuter et déboguer
Explication (déballé):
la source
$
pour aplatir si les éléments sont tous des entiers, en vérifiant avec OP maintenant.Octave , 33 octets
Essayez-le en ligne!
la source
Fusain , 14 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
K4 / K (oK) ,
191614 octetsSolution:
Essayez-le en ligne!
Exemple:
Explication:
L'évaluation s'effectue de droite à gauche. Divisez 7 1s, 7 2s, 7 3s et 7 4s par 70 divisé par l'entrée; puis résumez.
la source
Excel: 33 octets
(3 octets enregistrés à partir de la réponse de @ wernisch en exécutant des données sur 2 lignes de A1: N1 et A2: N2)
Toutes mes excuses pour ne pas avoir inclus cela en tant que commentaire. Je n'ai pas assez de réputation pour le faire.
la source
Japt ,
1110 octetsEssayez-le
Explication
la source
Triangularité , 49 octets
Essayez-le en ligne!
Explication
la source
Perl 5
-pa
, 28 octetsEssayez-le en ligne!
L'entrée est séparée par des espaces plutôt que par des virgules.
la source
$.
du multiplicateur parfait. Pas besoin de$i
APL + WIN, 13 octets
Demande le tableau comme vecteur d'entiers:
Explication:
la source
Java 8, 57 octets
Essayez-le en ligne.
Explication:
la source
J , 16 octets
Explication:
Essayez-le en ligne!
la source
Clojure,
4846 octetsCela a fini par être plus court que la combinaison mapcat + subvec.
la source
TI-Basic, 25 octets
Solution alternative, 39 octets
la source
Ruby , 65 octets
Essayez-le en ligne!
la source
size
propriété. Essayez-le en ligne!Excel,
3633 octets-3 octets grâce à @tsh.
Entrez dans la première ligne (
A1
àAB1
).la source
A1:AB1
- être ->1:1
?Julia 0.6 , 27 octets
Essayez-le en ligne!
L'
repeat
appel forme une matrice de colonnes de 28 valeurs, contenant sept 1, puis sept 2, etc. On le transpose ensuite avec'
, puis on fait une multiplication matricielle avec l'entrée (la multiplication est implicite ici). Puisqu'il s'agit d'une multiplication matricielle d'une matrice 1x28 avec une matrice 28x1, nous nous retrouvons avec une seule valeur, qui est la somme pondérée dont nous avons besoin. Divisez cela par70
pour obtenir notre moyenne pondérée.la source