Tâche
Étant donné (par tout moyen) un ensemble de données en virgule flottante trié, renvoyer (par tout moyen et à moins de 1 ‰ de la valeur correcte) la moyenne interquartile .
Un algorithme possible
- Jeter les trimestres les plus bas et les plus hauts des points de données.
- Calculez la moyenne (somme divisée par le nombre) des points de données restants.
Remarque: Si la taille de l'ensemble de données n'est pas divisible de façon égale en quatre, vous devrez peser les points de données partagés par les sous-ensembles. Voir l' exemple d'évaluation 2 ci-dessous.
Exemple d'évaluation 1
Étant donné {1, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 38}
- Le nombre de données est de 12, nous supprimons donc les 3 points de données les plus bas et les plus hauts:
{1, 3, 4,5, 6, 6, 7, 7, 8,8, 9, 38} - Moyenne des 6 points de données restants:
(5 + 6 + 6 + 7 + 7 + 8) / 6 = 6,5
Exemple d'évaluation 2
Étant donné {1, 3, 5, 7, 9, 11, 13, 15, 17}
- Le nombre est de 9, donc chaque trimestre a 2¼ points de données:
{1, 2, (0,25 × 5),(0,75 × 5), 7, 9, 11, (0,75 × 13),(0,25 × 13), 15, 17} - Moyenne des 4,5 points de données restants:
(0,75 × 5 + 7 + 9 + 11 + 0,75 × 13) / 4,5 = 9
Pyth ,
1110 octetsSuite de tests.
Comment ça marche
Il quadruple la liste d'entrée pour garantir que le nombre de données est divisible par 4.
Il a toujours besoin d'être trié, car il
*4
s'applique à la liste entière plutôt qu'à chaque élément individuel.Ensuite, il divise la liste en quatre parties égales, puis supprime la première et la dernière partie.
La liste restante est aplatie et la moyenne est prise.
la source
MATL ,
1211 octetsL'entrée est un vecteur horizontal, au format
ou
Essayez-le en ligne!
Explication
la source
6L)
supprime le premier et le dernier élément? Quand je le fais, cela pousse un tas de nombres complexes.[2, -1+i]
lorsqu'il est utilisé comme un indice signifie2:end-1
Bonhomme de neige , 66 octets
Essayez-le en ligne!
Utilise le même algorithme que les réponses de @LeakyNun .
la source
Python 3, 50 octets
Ideone it!
Comment ça marche
C'est une traduction de ma réponse en Pyth .
la source
Gelée ,
141312 octetsEssayez-le en ligne!
Suite de tests.
Comment ça marche
C'est une traduction de ma réponse en Pyth .
la source
Pyke,
1613 octetsEssayez-le ici!
la source
Brachylog , 21 octets
Essayez-le en ligne! ou vérifier plusieurs cas de test
Explication
Il s'agit essentiellement de l'algorithme de réponse Pyth de @ LeakyNun.
La seule petite astuce consiste à multiplier par l'inverse de la longueur au lieu de diviser par la longueur, car la division entre 2 entiers est une division entière.
la source
Octave , 44 octets
Cela définit une fonction anonyme.
L'entrée est un vecteur horizontal.
Essayez-le sur ideone .
Explication
Le vecteur horizontal d'entrée est d'abord multiplié
*
par matrice ( ) par un vecteur colonne de quatre (construit avec~~(1:4)'
). Le résultat est une matrice à quatre colonnes où chaque ligne est une copie du vecteur d'entrée. Celui-ci est ensuite remodelé, tout en conservant l'ordre linéaire des éléments, dans une matrice à 4 colonnes (reshape(...,[],4)
). Les deux colonnes centrales sont conservées ((:,2:3)
) et linéarisées en une seule colonne ((:)
), dont la moyenne est calculée (mean(...)
).la source
[x;x;x;x]
au lieu de~~(1:4)'*x
@(x)mean([x;x;x;x](:)((b=numel(x))+1:3*b))
est également de 2 octets de moins. C'est pourquoi j'avais proposé, mais c'est essentiellement la même chose que votre approche.J ,
2018 octets2 octets grâce à @miles
Essayez-le en ligne! ( Interprète en ligne )
Usage
Comment ça marche
C'est une traduction de ma réponse en Pyth .
la source
-@#(+/%#)@}.#}.4#]
pour 18 octets .En fait ,
201513 octetsEssayez-le en ligne!
Comment ça marche
C'est une traduction de ma réponse en Pyth .
la source
Octave, 42 octets
Une autre fonction anonyme pour Octave.
Vous pouvez l' essayer en ligne . Entrez simplement cette commande, puis exécutez
ans([1 2 4 5 6 9])
ou tout nombre requis.Celui-ci commence par créer à partir du tableau d'entrée un avec 4 de chaque élément d'entrée en concaténant d'abord quatre copies verticalement, puis en l'aplatissant verticalement. Cela maintient l'ordre de tri.
Puis est extrait la plage d'éléments de la longueur du tableau d'entrée plus 1 à trois fois la longueur du tableau d'entrée. Parce que le nouveau tableau est quatre fois plus long, cela coupe les quartiles supérieur et inférieur.
Enfin, la moyenne du nouveau tableau est retournée.
la source
05AB1E, 15 octets
Explication
Essayez-le en ligne
la source
APL (Dyalog) , 15 octets
Essayez-le en ligne!
4∘/
quadrupler chaque élément-∘≢↓
supprimer autant d'éléments de fin qu'il y a d'éléments dans les arguments≢↓
déposer autant d'éléments de tête qu'il y a d'élément dans l'argument(
…)
Appliquez la fonction tacite suivante:+/
la somme÷
divisé par≢
le décomptela source
JavaScript (ES6), 75 octets
Utilise l'approche évidente en quadruple et tri, et j'arrive à l'utiliser
reduce
, ce qui est bien. La seule astuce ici est d'économiser 4 octets en réutilisant le comparateur de tri pour soustraire tous les éléments du tableau de zéro, ce qui me donne-2l
fois la réponse que je veux.la source
Golfscript,
2829 octetsEssayez-le en ligne!
la source
En fait, 12 octets
Essayez-le en ligne! (ne fonctionne pas actuellement car TIO est derrière quelques versions)
Explication:
la source
Mathematica, 51 octets
Trie quatre copies de la liste (pour éviter les problèmes de longueur de liste et non des multiples de quatre), participe
"1 quarter the length of resulting list plus 1"
à la"1/4 length list + 1 from the end"
, prend leurMean
.la source
Java
146octetsUne telle java beaucoup verbeuse!
Ungolfed plus ancien partiellement lisible avec des cas de test
la source
Clojure,
8281 octetsEdit: 1 octet de moins en réécrivant la partie "didvide by 2 n".
Précédent:
Utilise
for
pour générer 4 valeurs répétées, en utilisant float2.0
pour ne pas avoir de résultats fractionnaires, le reste est juste standard.la source
R,
1711 octetsEn supposant que
n
le vecteur d'entrée est sous la forme R standardn=c(1, 2, 3, ...)
.Cela n'est en rien surprenant puisque R peut être considéré comme «LE langage pour le calcul statistique» et possède de nombreuses statistiques intégrées.
MISE À JOUR. 6 octets enregistrés grâce à rturnbull car
trim
c'est le premier argument optionnel par défaut!Cas de test:
la source
trim
c'est le deuxième argument par défaut, vous n'avez pas besoin de le nommer;0.25
peut être raccourci à.25
ou1/4
. Cela vous fait économiser six octets.Excel, 17 octets
Le format d'entrée détendu rend cela facile. Entrez un par ligne dans la colonne A.
la source