罗塞塔石碑挑战:画一个盒子


10

Rosetta Stone挑战赛的目标是用尽可能多的语言编写解决方案。炫耀您的编程多语言!

挑战

您面临的挑战是要实现一种程序,该程序将以尽可能多的编程语言输入数字列表并输出数据的箱形图。箱形图将显示数据中的四分位数和离群值,甚至具有比例。您可以使用您的语言具有的任何标准库函数,因为这主要是语言展示。

什么是“箱形图”?

一个箱形图的图表数据的一种方式。箱形图具有一些基本功能。第一个特征是一个盒子,盒子的任一侧位于数据的第一和第三四分位数处。在箱形图的中心下方有一条线,给出了中位数。在箱形图的两端,都有“晶须”帮助显示数据的方差。晶须从盒子延伸到数据集中的最低和最高点,不包括异常值。离群值绘制为单个点。

首先,取数据的中位数。然后,取所有严格小于中位数的数据点,并计算该集合的中位数,使其成为第一个四分位数(Q1)。取所有严格大于中位数的数据点,然后计算该集合的中位数成为第三个四分位数(Q3)。找到的值R = 1.5*(Q3 - Q1)。减去Q1 - R这个的任何数字都是离群值。任何大于Q3 + R异常值的数字。取所有不是异常值的数据点的集合,该集合的最小值和最大值确定两个晶须的末端。

输入值

输入将以数字开头n=。然后会有n数字,每行一个。所有数字都是0到63之间的整数,包括0和63。

n=8
29
1
22
18
12
16
16
22

输出量

输出将是箱形图的再现。绘制图的一种可能方法是将其绘制为ASCII。您可以用ASCII以外的其他方式来绘制箱形图,但是主要的要求是绘制足够大的图形,以便可以分辨出重要特征的确切位置。箱形图应有一个比例尺,由大约5-10个等间距的数字组成。这是上述数据的一个示例图:

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

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

客观取胜标准

关于客观的获胜标准,这是:关于谁可以写得最短的条目,每种语言都是一个单独的竞赛,但是总的获胜者将是赢得这些子竞赛中最多的人。这意味着以多种不常见的语言回答的人可以获得优势。当一种语言中有多个解决方案时,代码高尔夫通常是决胜局:程序最短的人会为该语言赢得赞誉。

规则,限制和注释

您的程序可以用2013年4月11日之前存在的任何语言编写。我也将不得不依靠社区来验证一些以一些较不常见/深奥的语言编写的响应,因为我不太可能测试他们。


现任排行榜

本节将定期更新以显示语言的数量以及每种语言的领先者。

  • 朱莉娅(604)-普纳纳普斯
  • Mathematica(71)-chyanog
  • Python2.X(85)-阿比吉特
  • R(34)-扁平虫

当前用户排名

  1. Plannapus-2
  2. 阿披吉-1
  3. chyanog-1

2
我喜欢它!很好的规则配置。现在要学习一些语言...
luser droog 2013年

Answers:


6

R:34个字符

当然,R是用于统计的语言,它带有boxplot执行此操作的功能(这里需要包装器以适应输入样式):

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

用法:给定一个input1.txt包含以下内容的文件:

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

然后f("input1.txt")产生:

在此处输入图片说明

朱莉娅:604个字符

这是我有史以来第一次在Julia中工作,因此如果写得不好,我向Julia的粉丝致歉。

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

用法:

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

2

使用matplotlib的Python2.X 85个字符

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

在此处输入图片说明


1

Mathematica 71

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

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.