Rosetta Stone Challenge: Zeichne ein Box Plot

10

Das Ziel einer Rosetta Stone Challenge ist es, Lösungen in möglichst vielen Sprachen zu schreiben. Zeigen Sie Ihre Programmier-Mehrsprachigkeit!

Die Herausforderung

Ihre Herausforderung besteht darin, ein Programm zu implementieren, das eine Liste von Zahlen eingibt und ein Box-Diagramm der Daten in so vielen Programmiersprachen wie möglich ausgibt . Das Box-Diagramm zeigt die Quartile und Ausreißer in den Daten an und hat sogar eine Skala. Sie dürfen jede Art von Standardbibliotheksfunktion verwenden, über die Ihre Sprache verfügt, da dies meistens eine Sprachpräsentation ist.

Was ist ein "Boxplot"?

Ein Box-Plot ist eine Möglichkeit, Daten grafisch darzustellen. Ein Box-Plot weist einige wesentliche Merkmale auf. Das erste Merkmal ist eine Box, wobei sich jede Seite im ersten und dritten Quartil der Daten befindet. In der Mitte des Boxplots befindet sich eine Linie, die den Median angibt. An beiden Enden des Boxplots befinden sich "Whisker", mit deren Hilfe die Varianz der Daten angezeigt werden kann. Der Whisker erstreckt sich von der Box bis zu den kleinsten und größten Punkten im Datensatz, mit Ausnahme der Ausreißer. Die Ausreißer werden als einzelne Punkte dargestellt.

Nehmen Sie zunächst den Median der Daten. Nehmen Sie dann alle Datenpunkte, die streng kleiner als der Median sind, und berechnen Sie den Median dieser Menge, um das erste Quartil (Q1) zu werden. Nehmen Sie alle Datenpunkte, die streng größer als der Median sind, und berechnen Sie den Median dieser Menge, um das dritte Quartil (Q3) zu werden. Finden Sie den Wert von R = 1.5*(Q3 - Q1). Alle Zahlen weniger Q1 - Rsind Ausreißer. Alle Zahlen größer als Q3 + RAusreißer. Nehmen Sie den Satz aller Datenpunkte, die keine Ausreißer sind, und das Minimum und Maximum dieses Satzes bestimmt die Enden der beiden Whisker.

Eingang

Die Eingabe beginnt mit n=einer Zahl, gefolgt von einer Zahl. Es wird dann nZahlen geben, eine pro Zeile. Alle Zahlen sind ganze Zahlen von 0 bis einschließlich 63.

n=8
29
1
22
18
12
16
16
22

Ausgabe

Die Ausgabe erfolgt als Wiedergabe des Boxplots. Eine Möglichkeit, das Diagramm zu zeichnen, besteht darin, es in ASCII zu rendern. Sie können das Box-Diagramm auf viele andere Arten als ASCII rendern. Die Hauptanforderung ist jedoch, dass es groß genug gezeichnet wird, damit die genauen Positionen der wichtigen Features ermittelt werden können. Das Box-Diagramm sollte eine Skala haben, die aus etwa 5-10 Zahlen mit gleichem Abstand besteht. Hier ist ein Beispieldiagramm der obigen Daten:

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

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

Das objektive Gewinnkriterium

Ein objektives Gewinnkriterium ist hier: Jede Sprache ist ein separater Wettbewerb darüber, wer den kürzesten Beitrag schreiben kann, aber der Gesamtsieger wäre die Person, die die meisten dieser Unterwettbewerbe gewinnt. Dies bedeutet, dass eine Person, die in vielen ungewöhnlichen Sprachen antwortet, einen Vorteil erzielen kann. Code-Golf ist meistens ein Tiebreaker, wenn es in einer Sprache mehr als eine Lösung gibt: Die Person mit dem kürzesten Programm erhält eine Gutschrift für diese Sprache.

Regeln, Einschränkungen und Hinweise

Ihr Programm kann in jeder Sprache geschrieben werden, die vor dem 11. April 2013 existierte. Ich muss mich auch auf die Community verlassen, um einige Antworten zu validieren, die in einigen der ungewöhnlicheren / esoterischeren Sprachen geschrieben wurden, da ich wahrscheinlich nicht testen kann Sie.


Aktuelle Rangliste

Dieser Abschnitt wird regelmäßig aktualisiert, um die Anzahl der Sprachen und die jeweils führenden Personen anzuzeigen.

  • Julia (604) - Planapus
  • Mathematica (71) - Chyanog
  • Python2.X (85) - Abhijit
  • R (34) - Planapus

Aktuelle Benutzerrankings

  1. Planapus - 2
  2. Abhijit - 1
  3. Chyanog - 1
PhiNotPi
quelle
2
Ich liebe es! Eine sehr schöne Konfiguration von Regeln. Nun, um einige Sprachen zu lernen ...
luser droog

Antworten:

6

R: 34 Zeichen

Da R eine Sprache ist, die für Statistiken verwendet wird, verfügt es natürlich über eine entsprechende Funktion boxplot(für die hier ein Wrapper erforderlich ist, um den Eingabestil zu berücksichtigen):

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

Verwendung: Gegeben eine Datei input1.txt, die Folgendes enthält:

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

Dann f("input1.txt")produziert:

Geben Sie hier die Bildbeschreibung ein

Julia: 604 Zeichen

Dies ist meine allererste Veranstaltung in Julia, also entschuldige ich mich bei den Fans von Julia, wenn dies schlecht geschrieben ist.

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

Verwendungszweck:

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

Python2.X 85 Zeichen mit matplotlib

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

Geben Sie hier die Bildbeschreibung ein

Abhijit
quelle
1

Mathematica 71

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

Geben Sie hier die Bildbeschreibung ein

Chyanog
quelle