Remarque: Il s'agit du n ° 3 d'une série de défis de manipulation de tableaux . Pour le défi précédent, cliquez ici .
Moyenne mobile d'une liste
La moyenne mobile d'une liste est un calcul résultant en une nouvelle liste lissée, créée en faisant la moyenne de petites sous-listes superposées de l'original.
Lors de la création d'une moyenne mobile, nous générons d'abord la liste des sous-listes qui se chevauchent en utilisant une certaine «taille de fenêtre», en déplaçant cette fenêtre vers la droite une fois à chaque fois.
Par exemple, étant donné la liste [8, 4, 6, 2, 2, 4]
et la taille de la fenêtre 3
, les sous-listes seraient:
[8, 4, 6, 2, 2, 4] Sublists:
( ) <- [8, 4, 6]
( ) <- [4, 6, 2]
( ) <- [6, 2, 2]
( ) <- [2, 2, 4]
Nous calculons ensuite la moyenne moyenne de chaque sous-liste pour obtenir le résultat: [6.0, 4.0, 3.3, 2.7]
(chaque valeur arrondie à une décimale).
Le défi
Votre tâche consiste à écrire un programme ou une fonction qui, étant donné une liste L et un entier 1 ≤ n ≤ longueur (L) , calcule la moyenne mobile de L en utilisant la taille de fenêtre n .
Règles:
- Votre programme peut utiliser une division entière ou une division flottante. Dans le cas de la division flottante, de petites inexactitudes dues aux limitations du type de données sont autorisées, tant que la valeur est par ailleurs correcte.
- Vous pouvez soumettre un programme complet ou une fonction (mais pas un extrait).
- Vous pouvez supposer que la liste ne contiendra que des entiers positifs .
- Les failles standard sont interdites.
- Il s'agit de code-golf , donc la réponse la plus courte (en octets) l'emporte!
Cas de test
Notez que, pour plus de lisibilité, toutes les valeurs sont arrondies à une décimale.
n=5, [1, 2, 3, 4, 5, 6, 7, 8] -> [3, 4, 5, 6]
n=3, [100, 502, 350, 223, 195] -> [317.3, 358.3, 256]
n=1, [10, 10, 10] -> [10, 10, 10]
n=3, [10, 20, 30] -> [20]
n=2, [90, 40, 45, 100, 101] -> [65, 42.5, 72.5, 100.5]
Réponses:
Gelée , 3 octets
Essayez-le en ligne!
Assez simple grâce à
ṡ
Comment ça fonctionne
la source
Wolfram Language (Mathematica) , 13 octets
Mathematica a une fonction intégrée pour tout
Essayez-le en ligne!
Prend une liste puis un rayon ...
la source
MovingAverage
ಠ _____ ಠ Je refuse de le croireMovingAverage
renvoie un ensemble de fractions. Maintenant que cela a été autorisé par le PO, celaMovingAverage
devrait suffire.Haskell , 47 octets
Essayez-le en ligne!
Sauvegardé deux octets grâce à xnor!
la source
tail a
peut être extrait dans la garde.Dyalog APL, 4 octets
1 octet enregistré grâce à @Graham
2 octets enregistrés grâce à @ jimmy23013
Ai-je mentionné que l'APL n'est pas une langue de golf?
avec
n
à droite, ouavec
L
à droite.Essayez-le en ligne!
Comment?
÷
- diviserL
parn
⊢+/
- réduire+
sur les fenêtres den
la source
Python , 48 octets
Essayez-le en ligne!
Une fonction récursive. Plus court que le programme (50 octets)
Essayez-le en ligne!
Cela économise 2 octets en se terminant avec une erreur sur la
while
condition.la source
Inscrire , 3 octets
Essayez-le en ligne!
la source
Perl 6 , 33 octets
Essaye-le
Étendu:
la source
C,
868483 octetsEssayez-le en ligne!
Déroulé:
la source
J,
75 octetsEssayez-le en ligne!
Prend
n
comme argument de droite et la liste comme gauche. Nous remercions la solution d'Uriel pour l'idée de ne faire que la sommation dans l'infixe.Explication
Solution précédente (7 octets)
la source
Ohm v2 , 3 octets
Essayez-le en ligne!
Explication:
la source
Pyth , 5 octets
Essayez-le ici!
Comment ça marche
la source
Octave ,
3331 octetsEssayez-le en ligne!
Explication
La convolution (
conv
) est essentiellement une somme pondérée mobile. Si les poids sont choisis comme[1/n, ..., 1/n]
(obtenus comme~~(1:n)/n
) le résultat est une moyenne mobile, dont seule la'valid'
partie est conservée.la source
R , 72 octets
Essayez-le en ligne!
Calcule la
mean
de toutes lesn
fenêtres de taille ; lorsque la fenêtre dépasse le bord del
, les résultats sontNA
donc nous les filtrons.Forfait R + zoo, 13 octets
Le
zoo
package (infrastructure S3 pour les séries chronologiques régulières et irrégulières) possède de nombreuses fonctions pratiques. Vous pouvez l' essayer ici (R-violon) .la source
Japt v2.0a0, 7 octets
Essayez-le
Explication
Entrée implicite de tableau
U
et d'entierV
.Obtenez des sous-sections de
U
longueurV
Carte sur les sous-sections.
Divisez chaque élément par
V
.Additionnez tous les éléments.
la source
Python 3 , 61 octets
Essayez-le en ligne!
la source
Python 3 , 55 octets
Essayez-le en ligne!
la source
05AB1E , 5 octets
Explication:
Essayez-le en ligne!
la source
Mathematica, 21 octets
Essayez-le en ligne!
-3 octets JungHwan Min
la source
N[Mean/@##~Partition~1]&
Proton , 46 octets
Essayez-le en ligne!
Notez que cela prend une entrée via la syntaxe des fonctions de curry et retourne une liste de fractions.
la source
CJam,
1412 octets-2 octets grâce à @aditsu
la source
Jq 1,5 , 61 octets
Étendu
Essayez-le en ligne!
la source
JavaScript (ES6), 53 octets
la source
PHP, 94 octets
Essayez-le en ligne!
la source
Clojure , 48 octets
Essayez-le en ligne!
la source
Empilé , 22 octets
Essayez-le en ligne!
Explication
infixes
génère toutes les fenêtres de la longueur donnée. Ensuite, nous mappons notre propre fonction moyenne sur chaque infixe.la source
Lisp commun , 77 octets
Essayez-le en ligne!
la source
K (oK) ,
1311 octetsSolution:
Essayez-le en ligne!
Exemples:
Explication:
oK
a une fonction intégrée pour créer une fenêtre coulissante, puis résumez les tableaux résultants et divisez par taille de fenêtre coulissante pour obtenir la moyenne:la source
x%[commute]
vers la gauche et supprimer les parensDataWeave , 50 octets
la source
Funky ,
6766 octetsEnregistrement d'un octet avec la syntaxe curry.
Essayez-le en ligne!
la source
Java 8, 111 octets
Explication:
Essayez-le ici.
la source