Rosetta Stone Challenge: Draw a Box Plot

10

Tujuan dari Rosetta Stone Challenge adalah menulis solusi dalam bahasa sebanyak mungkin. Pamerkan multibahasa Anda dalam pemrograman!

Tantangan

Tantangan Anda adalah mengimplementasikan program yang akan memasukkan daftar angka dan menampilkan plot data, dalam sebanyak mungkin bahasa pemrograman . Plot kotak akan menampilkan kuartil dan pencilan dalam data, dan bahkan akan memiliki skala. Anda diperbolehkan menggunakan segala jenis fungsi perpustakaan standar yang dimiliki bahasa Anda, karena ini sebagian besar adalah karya bahasa.

Apa itu "plot kotak"?

Sebuah plot kotak adalah cara grafik data. Sebuah plot kotak memiliki beberapa fitur penting. Fitur pertama adalah kotak, dengan kedua sisi berada di kuartil pertama dan ketiga data. Ada garis di tengah plot kotak yang memberikan median. Di kedua ujung plot kotak, ada "kumis" yang membantu menunjukkan varians data. Kumis memanjang dari kotak ke titik terkecil dan terbesar dalam kumpulan data, tidak termasuk outlier. Pencilan diplot sebagai poin individual.

Pertama, ambil median data. Kemudian, ambil semua titik data yang benar - benar kurang dari median, dan hitung median himpunan ini untuk menjadi kuartil pertama (Q1). Ambil semua titik data yang benar - benar lebih besar dari median, dan hitung median himpunan ini untuk menjadi kuartil ketiga (Q3). Temukan nilai R = 1.5*(Q3 - Q1). Angka kurang dari Q1 - Rini adalah outlier. Angka lebih besar dari Q3 + Routlier. Ambil set semua titik data yang tidak outlier, dan minimum dan maksimum set ini menentukan ujung kedua kumis.

Memasukkan

Input akan dimulai dengan n=diikuti oleh angka. Maka akan ada nangka, satu per baris. Semua angka akan berupa bilangan bulat dari 0 hingga 63, inklusif.

n=8
29
1
22
18
12
16
16
22

Keluaran

Output akan berupa rendition plot kotak. Salah satu cara yang mungkin untuk menggambar plot adalah dengan merendernya di ASCII. Anda dapat membuat plot kotak dengan banyak cara selain ASCII, tetapi persyaratan utamanya adalah yang dibuat cukup besar sehingga memungkinkan untuk mengetahui lokasi yang tepat dari fitur-fitur penting. Petak kotak harus memiliki skala, yang terdiri dari sekitar 5-10 angka dengan jarak yang sama. Berikut ini salah satu contoh plot dari data di atas:

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

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

Kriteria Kemenangan yang Objektif

Adapun kriteria kemenangan yang objektif, ini dia: Setiap bahasa adalah kompetisi terpisah untuk siapa yang dapat menulis entri terpendek, tetapi pemenang keseluruhan adalah orang yang memenangkan sebagian besar sub-kompetisi ini. Ini berarti bahwa seseorang yang menjawab dalam banyak bahasa yang tidak biasa dapat memperoleh keuntungan. Code-golf sebagian besar tiebreak ketika ada lebih dari satu solusi dalam bahasa: orang dengan program terpendek mendapat pujian untuk bahasa itu.

Aturan, Batasan, dan Catatan

Program Anda dapat ditulis dalam bahasa apa pun yang ada sebelum 11 April 2013. Saya juga harus bergantung pada komunitas untuk memvalidasi beberapa tanggapan yang ditulis dalam beberapa bahasa yang lebih tidak umum / esoterik, karena saya tidak mungkin dapat menguji mereka.


Papan Peringkat Saat Ini

Bagian ini akan diperbarui secara berkala untuk menunjukkan jumlah bahasa dan siapa yang memimpin di masing-masing bahasa.

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

Peringkat Pengguna Saat Ini

  1. plannapus - 2
  2. Abhijit - 1
  3. chyanog - 1
PhiNotPi
sumber
2
Aku menyukainya! Konfigurasi aturan yang sangat bagus. Sekarang untuk mempelajari beberapa bahasa ...
luser droog

Jawaban:

6

R: 34 karakter

Tentu saja, R menjadi bahasa yang digunakan untuk statistik, ia dilengkapi dengan fungsi boxplotuntuk melakukan ini (yang membutuhkan pembungkus di sini untuk mengakomodasi gaya input):

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

Penggunaan: Diberikan file yang input1.txtmengandung berikut:

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

Kemudian f("input1.txt")menghasilkan:

masukkan deskripsi gambar di sini

Julia: 604 karakter

Ini adalah fungsi pertama saya di Julia, jadi saya minta maaf kepada penggemar Julia jika ini ditulis dengan buruk.

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

Pemakaian:

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

Python2.X 85 Karakter, menggunakan matplotlib

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

masukkan deskripsi gambar di sini

Abhijit
sumber
1

Mathematica 71

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

masukkan deskripsi gambar di sini

chyanog
sumber