Rosetta Stone Challenge : 상자 그림 그리기


10

Rosetta Stone Challenge의 목표는 가능한 한 많은 언어로 솔루션을 작성하는 것입니다. 다국어 프로그래밍을 과시하십시오!

도전

문제는 가능한 많은 프로그래밍 언어로 숫자 목록을 입력하고 데이터의 상자 그림을 출력하는 프로그램을 구현하는 것 입니다. 상자 그림에는 데이터의 사 분위수와 특이 치가 표시되며 스케일도 있습니다. 대부분 언어 쇼케이스이기 때문에 언어에있는 모든 종류의 표준 라이브러리 함수를 사용할 수 있습니다.

"상자 그림"이란 무엇입니까?

상자의 플롯은 데이터를 그래프의 방법입니다. 상자 그림에는 몇 가지 필수 기능이 있습니다. 첫 번째 특징은 상자이며, 어느 쪽이든 데이터의 1 사분 위와 3 사분 위에 위치합니다. 중앙값을 제공하는 상자 그림의 중앙에 줄이 있습니다. 상자 그림의 양쪽 끝에는 데이터의 변화를 보여주는 "위스커 (whisker)"가 있습니다. 수염은 상자에서 특이 값을 제외하고 데이터 세트의 최소 및 최대 지점으로 확장됩니다. 특이 치는 개별 점으로 표시됩니다.

먼저 데이터의 중앙값을 가져옵니다. 그런 다음 중앙값 보다 엄격하게 작은 모든 데이터 포인트를 가져 와서이 세트의 중앙값을 계산하여 첫 번째 사 분위수 (Q1)가되도록합니다. 중앙값 보다 엄격하게 큰 모든 데이터 포인트를 가져 와서이 세트의 중앙값을 계산하여 3 분위 (Q3)가되도록합니다. 의 값을 찾으십시오 R = 1.5*(Q3 - Q1). 이보다 적은 숫자 Q1 - R는 특이 치입니다. Q3 + R특이 치 보다 큰 숫자 특이 치가 아닌 모든 데이터 포인트 세트를 가져 오면이 세트의 최소값과 최대 값에 따라 두 수염의 끝이 결정됩니다.

입력

입력은 n=숫자로 시작합니다 . 그러면 n줄당 하나씩 숫자 가 나타납니다 . 모든 숫자는 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)-Plannapus
  • 매스 매 티카 (71)-Chyanog
  • Python2.X (85)-아비 짓
  • R (34)-플래너 퍼스

현재 사용자 순위

  1. plannapus-2
  2. 아비 짓-1
  3. chyanog-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 자

이것은 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

매스 매 티카 71

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

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.