분포도를 그리십시오!


12

도전

입력으로 세 개의 정수가 주어지며 min_value, max_value, sample_size, 배열 또는 여러 매개 변수로 답변에 전달할 수 있습니다.

당신의 작업은 임의의 편리한 형식으로 다이어그램출력하는 것인데 , (min_value, max_value)범위 내의 임의의 숫자 (min_value, max_value)가 선택 될 때 나타나는 범위 내의 숫자의 빈도를 보여줍니다 sample_size. 난수 시퀀스는 답변 내에 생성되어야합니다.

넓은 범위와 표본 크기를 사용하면 표현이 정확한 한 다이어그램이 사용하는 단계를 자유롭게 변경할 수 있습니다.

함께 [1, 5, 10]입력으로서 :

o o o x o
x o x x x
x x x x x
1 2 3 4 5

[1, 100, 15](00 도시 1-9,도 10 10-19 등 때문에 10 단계)로서 입력 :

xx oo oo xx oo xx oo oo oo oo
xx oo oo xx oo xx xx oo oo oo
xx xx oo xx xx xx xx xx xx oo
00 10 20 30 40 50 60 70 80 90

채점

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.


1
필요한 높이보다 큰 테이블을 출력 할 수 없다고 생각합니까? 예를 [1,5,10]들어, 높이는 10? 따라서 열 4는 다음과 같습니다 (수평 왼쪽에서 오른쪽이 아닌 수직으로 하단) oooooooxxx4.
Kevin Cruijssen

6
너비 빈을 선택하지 못하게하려면 b-a어떻게해야합니까? 그것은 매우 편리한 형식입니다 ...
Giuseppe

1
Giuseppe는 범위 a...b의 경우 다이어그램에 전체 범위를 포괄하는 단일 빈이있어 샘플 수와 동일한 높이의 단일 막대가 생성됨을 의미합니다.
Stewie Griffin

1
히스토그램을 수평으로 그릴 수 있습니까? 또한 값이 범위 내에서 균일하게 선택되어야합니까, 아니면 모든 결과가 가능한 분포가 있습니까?

1
분포에 대한 @Mnemonic : 합의 는 OP가 명시하지 않는 한 균일 할 필요가 없다는 것입니다.
Stewie Griffin

답변:


3

젤리 , 13 바이트

Ṫɓr/;"xẊĠ>ʋ¥G

매우 편리한 형식을 사용 합니다.

  • 왼쪽 축에 값을 인쇄합니다
  • 용도 0(등에 배신 화소로서 xS)과 1백그라운드 화소 등 (등 o의)
  • 범위 내 최대 길이 숫자의 문자가 있으므로 "픽셀"사이의 가로 간격을 많이 사용합니다 (예 : -23은 길이 3, 23은 길이 2).

온라인으로 사용해보십시오!

참고 : 입력 배열이 필요하지 않은 경우가 될 것이다 11 바이트 , 두 개의 인수를 복용 [from, to]하고 sampleSize단지와 함께 r/;"xẊĠ>ʋ¥G.


나는 이것이 4 바이트에 대해 편리한 포맷 허용량을 조금 너무 많이 가지고 있다고 생각합니다.

Ṗ;1K

이것은 공백으로 식별 되고 분리 된 단일 빈 , 축을 나타내는 다른 공간 및 높이 100 %를 나타내는 단일 빈으로 주석Giuseppe 가 제시 한 아이디어 (해결해야 함)를 사용 from하고 있습니다.to1

... 또는 심지어 Ṗ12 바이트 만!


10

옥타브 , 34 32 바이트

@(a,b,n)hist(--a+randi(b-a,n,1))

TIO에서는 작동하지 않지만 Octave-online.net에서 작동합니다 .

다음과 같은 히스토그램 (막 대형 차트)을 만듭니다.

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

"모든 편리한 형식"으로 계산됩니다.

0이 아닌 구간을 표시 해야하는 경우 38 바이트로 해결할 수 있습니다.

@(a,b,n)hist(--a+randi(b-a,n,1),a+1:b)

높이가없는 빈에 대한 설명을 요청했습니다 .0이 아닌 모든 빈보다 엄격하게 작거나 큰 경우 ( f(1,5,1)예 : 동작)
Jonathan Allan

1
나는 그 가장 확실히 지적 할 의무가 느낄 수 없는 히스토그램 , 오히려 그것은이다 막대 차트 (전혀 같은 것이 아니다된다).
caird coinheringaahing

2
@cairdcoinheringaahing 위키 페이지를 통해 감추고 이것이 히스토그램이 아닌 것을 보지 못합니다. 왜 그것이 막 대형 차트라고 생각하는지 설명해 주시겠습니까?
Imus

@Imus 히스토그램은 특별한 종류의 막대 차트입니다. 나는 caird coinheringaahing이 만들고 싶은 요점은 빈이 임의 변수의 실제 분포를 추정 할 수있을 정도로 충분히 크면 히스토그램으로 만 자격이 부여된다는 것입니다 (이 경우 실제로 완전히 평평합니다). 샘플 크기가 10 인 경우 적절한 히스토그램을 만들 수 없습니다.
시계 반대 방향으로 돌리지

6

R , 36 바이트

function(a,b,n)stem(sample(a:b,n,T))

온라인으로 사용해보십시오!

한숨. 줄기 도표.

무슨 말을하는지 모르지만 여전히 줄기 판이 14 판에 있기 때문에 줄기 세포가 좋은 생각이라고 생각하는 일부 교수로부터 [이 특정 연구 분야]에 대한 통계 소개를 받는 2 학년 대학생들의 존재 1983 년 4 판 이후 출판 된 교과서 중


5

, 25 바이트

≔…·θηθ≔Eζ‽θηEθ№ηι↖←E⮌θ⮌Iι

온라인으로 사용해보십시오! 설명:

≔…·θηθ

분포의 포괄적 인 범위를 만듭니다.

≔Eζ‽θη

원하는 횟수의 범위를 샘플링하십시오.

Eθ№ηι

샘플에서 각 범위의 수를 세고 인쇄하십시오.

↖←E⮌θ⮌Iι

라벨을 인쇄하십시오.



3

Java 11, 184168 바이트

(m,M,s)->{int a[]=new int[M],q=M;for(;s>0;q=M)if((q*=Math.random())>m-2){a[q]++;s--;}for(;m<=M;)System.out.printf("%0"+(M+"").length()+"d%s%n",m,"*".repeat(a[m++-1]));}

온라인으로 사용해보십시오. (참고 : Java 11은 아직 TIO가 아니기 때문에 동일한 바이트 수에 대해 String.repeat(int)에뮬레이트됩니다 repeat(String,int).)

설명:

(m,M,s)->{                         // Method with three integer parameters & no return-type
                                   // (`m` = min_value; `M` = max_value; `s` = sample_size)
  int a[]=new int[M],              //  Integer-array, filled with `M` amount of 0s
      q=M;                         //  Temp integer for the random value, set to `M`
  for(;s>0;                        //  Loop as long as `s` isn't 0 yet:
      q=M)                         //    Reset `q` back to `M` after every iteration
    if((q*=Math.random())          //   Pick a random integer in the range [0, `M`)
       >m-2){                      //   If this random integer is larger than `m-2`:
      a[q]++;                      //    Increase the value at that this random index by 1
      s--;}                        //    And decrease `s` by 1
  for(;m<=M;)                      //  Loop in the range [`m`, `M`]
    System.out.printf(             //   Print with trailing new-line
      "%0"+(M+"").length()+"d%s%n",//   and leading zeros if necessary:
      m,                           //    The number
      "*".repeat(a[m++-1]));}      //    appended with "*" repeated the amount of times
                                   //    specified in the random array at index `m-1`

2

R , 52 바이트

function(a,b,n)table(cut(sample(a:b,n,T),a:(b+1)-1))

온라인으로 사용해보십시오!

반환 table과 주파수를 names선택한 반개 구간과 동일 cut하므로, (0,1], (1,2], (2,3], 등. 보다 합리적인 비닝을 선택하려고하지 않습니다.


하지 않을까요 function(a,b,n)hist(sample(a:b,n,T))질문의 요구 사항을 만족?
ngm

@ngm 것 같아요 ... 도전이 친밀한 것처럼 보이기 때문에 텍스트 출력을하고 싶었지만 직접 게시하는 것 이상입니다.
Giuseppe

2

루비, 135 바이트 , 117 바이트

d=->(m,n,s){p=(m..n);t=(1..s).map{rand(p)};p.map{|h|g=t.count(h);"#{h}-#{'x'*g}#{'o'*(t.map{|e|t.count(e)}.max-g)}"}}

언 골프 드 :

d =-> (m,n,s) {
  p = (m..n)
  t = (1..s).map{rand(p)}
  p.map{ |h|
    g = t.count(h)
    "#{ h }-#{ 'x' * g }#{ 'o' * (t.map{|e| t.count(e) }.max - g) }"
  }
}

puts d.call(1,5,10)

온라인으로 사용해보십시오! -내가 한 것처럼 다른 사람이 테스트하고 싶을 경우를 대비하여!
Dom Hastings



1

자바 스크립트, 239

죄송하지만 변수 이름은 willy-nilly입니다. 어쨌든, 질문은 편리한 형식 이라고 말했기 때문에이 함수는 옆으로 그래프를 반환합니다.

f=>{x=Math;z=Array;q=_=>x.floor(x.random()*(f[1]-f[0]))+f[0];r=z(f[1]-f[0]).fill(0);z(f[2]).fill``.forEach(_=>r[q()-1]++);u=`${f[1]}`.length;return r.map((e,i)=>`${`${i}`.padEnd(u)}${" x".repeat(e)}`.padEnd(x.max(...r)*2+u," o")).join`\n`}

1

apt -R, 14 바이트

최대, 최소, 크기 순서로 입력을받습니다. 차트를 가로로 출력합니다.

õV
öW
Ë+QpVè¥D

시도 해봐


설명

             :Implicit input of integers U=max_value, V=min_value & W=sample_size
õV           :Range [U,V]
\n           :Reassign to U
öW           :Get an array of W random elements from U
\n           :Reassign to V
Ë            :Map each integer D in U
 +           :  Append
  Q          :  Quotation mark
   p         :  Repeat
    Vè       :   Count the elements in V
      ¥D     :    That equal D
             :Implicitly join with newlines and output.

0

Pyth, 19 바이트

JmOK}FPQeQVK,N*/JNd

여기 사용해보십시오

설명

JmOK}FPQeQVK,N*/JNd
   K}FPQ             Get the inclusive range between the first two inputs as K.
JmO     eQ           Get <last input> random elements as J.
          VK         For each value in the range...
            ,N       ... output a list of the value...
              */JNd  ... and spaces equal to the count in J.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.