Étant donné une entrée d'un entier n et une liste d'entiers positifs m 1 , m 2 , ..., sortir une liste d'entiers m 1 ' , m 2 ' , ... où m x ' est défini comme la moyenne de m xn à m x + n .
Lors du calcul de ces moyennes, ignorez les indices qui sont hors limites (et ajustez ce que vous divisez la somme en conséquence). n sera toujours ≥ 1 mais jamais la moitié de la longueur de m (arrondie vers le bas) ou plus. Cela signifie que la longueur minimale de m est 4. Les éléments de m seront des entiers positifs, mais la sortie doit être précise à au moins 3 décimales.
Les éléments d'entrée / sortie qui sont des listes peuvent être des chaînes séparées par des espaces / virgules ou des tableaux / listes / etc. Pour la saisie, si votre solution est une fonction, vous pouvez en outre prendre un premier argument de n et des arguments supplémentaires comme m x (cela s'applique également aux arguments de ligne de commande).
Voici une représentation visuelle de n=1
:
1 4 5 7 10
__/ | | |
L avg(1,4) = 2.5
| | |
\___/ | |
L avg(1,4,5) = 3.333
| |
\___/ |
L avg(4,5,7) = 5.333
|
\___/
L avg(5,7,10) = 7.333
\___
L avg(7,10) = 8.5
Final output: 2.5 3.333 5.333 7.333 8.5
Puisqu'il s'agit de code-golf , le code le plus court en octets l'emporte.
Cas de test ( ceux-ci ont été effectués manuellement; veuillez me signaler toute erreur ):
In Out
----------------------------------------------------------------------
n=1, m=12 6 3 9 9 7 6 6
n=1, m=1 4 5 7 10 2.5 3.333 5.333 7.333 8.5
n=1, m=1 3 3 7 4 2 4 2 2 2.333 4.333 4.666 4.333 3.333 2.666 3
n=2, m=1 3 5 9 10 14 15 16 23 3 4.5 5.6 8.2 10.6 12.8 15.6 17 18
n=3, m=1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
n=3, m=1 2 3 4 5 6 7 8 2.5 3 3.5 4 5 5.5 6 6.5
la source
avg(0,1,2)
n'est pas le même queavg(1,2)
. Pour les "cas marginaux" (ha), vous ne devez pas faire la moyenne d'autant d'éléments de la liste d'entrée.m_i
sont positifs.Réponses:
Pyth, 20 octets
Suite de tests
Assez simple, coupez simplement la section appropriée de la liste, puis faites la moyenne.
la source
E
dehors de la carte car il continuera d'essayer de lire une nouvelle valeur si elle est à l'intérieur. Cela lui fait prendre le même nombre d'octets.MATL ,
30282624 octetsTesté sur Matlab et sur Octave. Utilise la version actuelle (9.1.0) du langage / compilateur.
L'entrée est: d'abord le nombre contrôlant la longueur de la fenêtre, puis le tableau avec le format
[1 4 5 7 10]
.EDIT (20 mai 2016): Essayez-le en ligne! Le code dans le lien a été
X+
remplacé parY+
pour se conformer à la version 18.0.0 de la langue.Exemple
Explication
Le code Matlab équivalent serait
Le code MATL utilise les fonctionnalités récemment ajoutées de l'entrée implicite et du presse-papiers d'entrée de fonction automatique:
la source
CJam,
3130 octetsLe format d'entrée est
n [m1 m2 ... mx]
.Exécutez tous les cas de test. (Convertit automatiquement la suite de tests au format d'entrée requis.)
Cela fonctionne en pré et en ajoutant des
n
espaces, puis en prenant toutes les sous-chaînes de longueur2n+1
et en supprimant à nouveau les espaces avant de calculer leurs moyennes.la source
Julia, 57 octets
Il s'agit d'une fonction qui accepte deux entiers et renvoie un tableau de flottants.
L'approche ici est très simple. Nous construisons un nouveau tableau en prenant la moyenne des sections du tableau d'entrée, en tronquant à l'avant et à l'arrière.
la source
Haskell,
9795 octetsExemple d'utilisation:
2 # [1,3,5,9,10,14,15,16,23]
->[3.0,4.5,5.6,8.2,10.6,12.8,15.6,17.0,18.0]
.Comment ça fonctionne:
la source
Pyth, 22 octets
Explication:
Essayez-le ici .
la source
JavaScript (ES6), 104
Total en cours d'exécution / taille de l'échantillon en cours d'exécution. En Javascript, la lecture d'une valeur en dehors des limites d'un tableau donne undefined, qui peut être converti en 0 en utilisant ~~
Non golfé
Tester
la source
JavaScript (ES6), 82 octets
code:
tester:
la source