ロゼッタストーンチャレンジ:箱ひげ図を描く


10

ロゼッタストーンチャレンジの目標は、できるだけ多くの言語でソリューションを作成することです。プログラミングの多言語性を自慢して見せてください!

チャレンジ

課題は、できるだけ多くのプログラミング言語で、数値のリストを入力し、データの箱ひげ図を出力するプログラムを実装することです。箱ひげ図は、データの四分位数と外れ値を表示し、スケールも表示されます。これは主に言語のショーケースであるため、言語が持つあらゆる種類の標準ライブラリ関数を使用できます。

「箱ひげ図」とは何ですか?

ボックスプロットは、データをグラフ化する方法です。ボックスプロットにはいくつかの重要な機能があります。最初の特徴はボックスで、どちらの側もデータの最初と3番目の四分位数にあります。ボックスプロットの中央には、中央値を示す線があります。ボックスプロットの両端には、データの分散を示すのに役立つ「ひげ」があります。ひげはボックスから外れ値を除いてデータセット内の最小および最大のポイントまで伸びます。外れ値は個別の点としてプロットされます。

まず、データの中央値を取ります。次に、中央値よりも厳密に小さいすべてのデータポイントを取得し、このセットの中央値を計算して、最初の四分位数(Q1)にします。中央値よりも厳密に大きいすべてのデータポイントを取得し、このセットの中央値を計算して3番目の四分位数(Q3)にします。の値を見つけますR = 1.5*(Q3 - Q1)Q1 - Rこれより少ない数値は異常値です。より大きい数値Q3 + Rは外れ値です。外れ値ではないすべてのデータポイントのセットを取り、このセットの最小値と最大値によって2つのひげの端が決まります。

入力

入力はn=数字で始まります。次にn、1行に1つずつ数値が表示されます。すべての数値は0から63までの整数です。

n=8
29
1
22
18
12
16
16
22

出力

出力はボックスプロットのレンディションになります。プロットを描画する1つの可能な方法は、それを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)-チャノグ
  • Python2.X(85)-アビジット
  • R(34)-プラナパス

現在のユーザーランキング

  1. プランナプス-2
  2. アビジット-1
  3. チャノグ-1

2
大好きです!ルールの非常に優れた構成。次に、いくつかの言語を学習します...
luser droog

回答:


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文字

これは、ジュリアでの初めての機能です。そのため、不適切に記述されている場合は、ジュリアのファンに謝罪します。

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

Python2.X 85文字、matplotlibを使用

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]]

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.