Rosetta Stone Challenge: Kutu Çizimi


10

Rosetta Stone Challenge'ın hedefi mümkün olduğunca çok dilde çözüm yazmaktır. Programlama çokdilliliğinizi gösterin!

Meydan okuma

Zorluklarınız, sayıların bir listesini girecek ve verilerin bir kutu grafiğini çıkaracak ve mümkün olduğunca çok programlama dilinde bir program uygulamaktır . Kutu çiziminde verilerdeki çeyrekler ve aykırı değerler görüntülenecek ve hatta bir ölçeği olacaktır. Çoğunlukla bir dil vitrini olduğundan, dilinizin sahip olduğu her türlü standart kitaplık işlevini kullanmanıza izin verilir.

"Kutu çizimi" nedir?

Bir kutu arsa verileri grafiğe bir yoludur. Bir kutu grafiğinin birkaç temel özelliği vardır. İlk özellik, her iki tarafın da verilerin birinci ve üçüncü çeyreklerinde bulunduğu bir kutudur. Kutu çiziminin ortasından aşağıya medyan veren bir çizgi vardır. Kutu çiziminin her iki ucunda da verilerin varyansını göstermeye yardımcı olan "bıyıklar" vardır. Bıyık, aykırı değerler hariç olmak üzere kutudan veri kümesindeki en küçük ve en büyük noktalara uzanır. Aykırı değerler bireysel noktalar olarak çizilir.

İlk olarak, verilerin medyanını alın. Ardından, medyandan kesinlikle daha az olan tüm veri noktalarını alın ve ilk çeyrek olmak üzere bu setin medyanını hesaplayın (Q1). Medyandan kesinlikle daha büyük olan tüm veri noktalarını alın ve üçüncü çeyrek olmak üzere bu setin medyanını hesaplayın (Q3). Değerini bulun R = 1.5*(Q3 - Q1). Bu sayıdan daha az olan rakamlar Q1 - Raykırı değerlerdir. Daha büyük sayılar Q3 + Raykırı değerlerdir. Aykırı olmayan tüm veri noktalarının kümesini alın ve bu kümenin minimum ve maksimum değerleri iki bıyığın uçlarını belirler.

Giriş

Giriş n=bir sayı ile başlar . Daha sonra nher satırda bir tane olmak üzere sayılar olacaktır . Tüm sayılar 0 ile 63 arasında bir tam sayı olacaktır.

n=8
29
1
22
18
12
16
16
22

Çıktı

Çıktı, kutu çiziminin bir sunumu olacaktır. Grafiği çizmenin olası bir yolu, ASCII'de çizmektir. Kutu grafiğini ASCII'den başka birçok şekilde oluşturabilirsiniz, ancak ana gereksinim, önemli özelliklerin tam konumlarını söyleyebilmek için yeterince büyük çizilmesidir. Kutu çiziminde eşit aralıklı yaklaşık 5-10 sayıdan oluşan bir ölçek olmalıdır. Yukarıdaki verilerin örnek bir örneği:

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

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

Amaç Kazanma Kriteri

Objektif bir kazanma ölçütüne gelince, işte: Her dil, en kısa girişi kimin yazabileceği konusunda ayrı bir yarışmadır, ancak genel kazanan, bu alt yarışmaların çoğunu kazanan kişi olacaktır. Bu, nadir olmayan birçok dilde cevap veren bir kişinin avantaj sağlayabileceği anlamına gelir. Code-golf çoğunlukla bir dilde birden fazla çözüm olduğunda bir çığır açıcıdır: en kısa programa sahip kişi bu dil için kredi alır.

Kurallar, Kısıtlamalar ve Notlar

Programınız 11 Nisan 2013'ten önce mevcut olan herhangi bir dilde yazılabilir. Ayrıca, daha nadir / ezoterik dillerin bazılarında yazılan bazı yanıtları doğrulamak için topluluğa güvenmek zorunda kalacağım, çünkü test edemiyorum onlar.


Mevcut Büyük Şerit

Bu bölüm, dillerin sayısını ve her birinde kimin önde olduğunu göstermek için periyodik olarak güncellenecektir.

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

Mevcut Kullanıcı Sıralaması

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

2
Onu seviyorum! Kuralların çok güzel bir yapılandırması. Şimdi bazı dilleri öğrenmek için ...
luser droog

Yanıtlar:


6

R: 34 karakter

Tabii ki, R istatistik için kullanılan bir dil olarak, bunu boxplotyapmak için bir işlevle birlikte gelir (giriş stilini karşılamak için burada bir sargıya ihtiyaç duyar):

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

Kullanım: input1.txtAşağıdakileri içeren bir dosya verildi :

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

Sonra f("input1.txt")üretir:

resim açıklamasını buraya girin

Julia: 604 karakter

Bu Julia'daki ilk işlevim, bu yüzden kötü yazılmışsa Julia hayranlarından özür dilerim.

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

Kullanımı:

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

2

Matplotlib kullanan Python2.X 85 Karakterleri

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

resim açıklamasını buraya girin


1

Mathematica 71

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

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.