Rosetta Stone Challenge: dessiner un diagramme de boîte


10

L'objectif d'un Rosetta Stone Challenge est d'écrire des solutions dans autant de langues que possible. Montrez votre multilinguisme de programmation!

Le défi

Votre défi est de mettre en œuvre un programme qui entrera une liste de nombres et produira un diagramme à boîte des données, dans autant de langages de programmation que possible . Le diagramme en boîte affichera les quartiles et les valeurs aberrantes dans les données, et il aura même une échelle. Vous êtes autorisé à utiliser n'importe quelle sorte de fonction de bibliothèque standard de votre langue, car il s'agit principalement d'une vitrine de langue.

Qu'est-ce qu'un "box plot"?

Un diagramme en boîte est un moyen de représenter graphiquement les données. Une boîte à moustaches présente quelques caractéristiques essentielles. La première caractéristique est une boîte, chaque côté étant situé dans les premier et troisième quartiles des données. Il y a une ligne au centre de l'intrigue qui donne la médiane. À chaque extrémité de la boîte à moustaches, il y a des «moustaches» qui aident à montrer la variance des données. Le moustache s'étend de la boîte aux points les plus petits et les plus grands de l'ensemble de données, à l'exclusion des valeurs aberrantes. Les valeurs aberrantes sont tracées sous forme de points individuels.

Tout d'abord, prenez la médiane des données. Ensuite, prenez tous les points de données strictement inférieurs à la médiane et calculez la médiane de cet ensemble pour devenir le premier quartile (Q1). Prenez tous les points de données strictement supérieurs à la médiane et calculez la médiane de cet ensemble pour devenir le troisième quartile (Q3). Trouvez la valeur de R = 1.5*(Q3 - Q1). Tout nombre moins que Q1 - Rce sont des valeurs aberrantes. Tous les nombres supérieurs aux Q3 + Rvaleurs aberrantes. Prenez l'ensemble de tous les points de données qui ne sont pas aberrants, et le minimum et le maximum de cet ensemble déterminent les extrémités des deux moustaches.

Contribution

La saisie commencera par n=suivie d'un nombre. Il y aura ensuite des nchiffres, un par ligne. Tous les nombres seront des entiers de 0 à 63 inclus.

n=8
29
1
22
18
12
16
16
22

Production

La sortie sera un rendu du diagramme en boîte. Une façon possible de dessiner le tracé est de le rendre en ASCII. Vous pouvez rendre le diagramme en boîte de différentes manières autres qu'en ASCII, mais la principale exigence est qu'il soit suffisamment grand pour pouvoir indiquer l'emplacement exact des fonctions importantes. Le diagramme en boîte doit avoir une échelle, composée d'environ 5 à 10 nombres également espacés. Voici un exemple de tracé des données ci-dessus:

              +--+----+        
              |  |    |        
 X          +-+  |    +------+ 
              |  |    |        
              +--+----+        

0    0    1    1    2    2    3
0    5    0    5    0    5    0

Le critère de gain objectif

En ce qui concerne un critère de gain objectif, le voici: chaque langue est une compétition distincte pour savoir qui peut écrire la plus courte inscription, mais le gagnant général serait la personne qui remporte le plus de ces sous-compétitions. Cela signifie qu'une personne qui répond dans de nombreuses langues rares peut bénéficier d'un avantage. Le code-golf est surtout un bris d'égalité lorsqu'il y a plus d'une solution dans une langue: la personne avec le programme le plus court obtient un crédit pour cette langue.

Règles, restrictions et notes

Votre programme peut être écrit dans n'importe quelle langue qui existait avant le 11 avril 2013. Je devrai également compter sur la communauté pour valider certaines réponses écrites dans certaines des langues les plus rares / ésotériques, car il est peu probable que je puisse tester leur.


Classement actuel

Cette section sera périodiquement mise à jour pour montrer le nombre de langues et qui mène dans chacune.

  • Julia (604) - plannapus
  • Mathematica (71) - chyanog
  • Python2.X (85) - Abhijit
  • R (34) - plannapus

Classements des utilisateurs actuels

  1. plannapus - 2
  2. Abhijit - 1
  3. chyanog - 1

2
J'aime cela! Une très belle configuration de règles. Maintenant pour apprendre quelques langues ...
luser droog

Réponses:


6

R: 34 caractères

Bien sûr, R étant un langage utilisé pour les statistiques, il est livré avec une fonction boxplotpour ce faire (qui a besoin ici d'un wrapper pour s'adapter au style d'entrée):

f=function(x)boxplot(scan(x,sk=1))

Utilisation: étant donné un fichier input1.txtcontenant les éléments suivants:

n=10
29
1
22
19
9
13
15
22
63
2

f("input1.txt")Produit ensuite :

entrez la description de l'image ici

Julia: 604 caractères

Ceci est ma toute première fonction dans Julia, donc mes excuses aux fans de Julia si c'est mal écrit.

function g(f)
a=int(split(readall(open(f)),'\n')[2:])
b,c,d=int(quantile(a,[.25,.5,.75]))
w=1.5*(d-b)
o=a[a.<b-w]
O=a[a.>d+w]
t=int(b-w>0?b-w:0)
u=int(d+w<63?d+w:63)
S=s=""
if !isempty(o)
for i in 1:length(o)
s=s*lpad('x',[0,o][i+1]-[0,o][i]-1,' ')
end
end
if !isempty(O)
for i in 1:length(O)
S=S*lpad('x',[0,O][i+1]-[0,O][i]-u-1,' ')
end
end
x="0"
for i in 9:9:63
x=x*lpad(string(i),i-(i-9)," ")
end
v=isempty(o)?b-1:b-o[length(o)]-1
print(x*"\n"*lpad('+'*'-'^(d-b-1)*'+',d,' ')*'\n'*s*lpad('-'^(b-t-1),v,' ')*'|'*lpad('|',c-b,' ')*' '^(d-c-1)*'|'*'-'^(u-d)*S*'\n'*lpad('+'*'-'^(d-b-1)*'+',d,' '))
end

Usage:

g("input1.txt")
0        9       18       27       36       45       54       63
         +-----------+
---------|      |    |------------------                     x
         +-----------+

2

Python2.X 85 caractères, utilisant matplotlib

import matplotlib.pylab as p
p.boxplot(map(input,['']*int(raw_input()[2:])))
p.show()

entrez la description de l'image ici


1

Mathematica 71

BoxWhiskerChart[Input/@x~Array~FromDigits@StringTake[InputString[],-1]]

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.