Vẽ sơ đồ phân phối!


12

Thử thách

Bạn được cung cấp ba số nguyên làm đầu vào - min_value, max_value, sample_size, mà bạn có thể chuyển đến câu trả lời của mình dưới dạng mảng hoặc một vài tham số.

Nhiệm vụ của bạn là xuất ra một sơ đồ ở bất kỳ định dạng thuận tiện nào , cho thấy tần số của các số trong (min_value, max_value)phạm vi hiển thị khi một số ngẫu nhiên trong (min_value, max_value)phạm vi được chọn sample_sizelần. Chuỗi số ngẫu nhiên nên được tạo ra trong câu trả lời của bạn.

Với phạm vi lớn và kích thước mẫu, bạn có thể tự do thay đổi các bước mà sơ đồ của bạn sử dụng, miễn là cách biểu diễn vẫn chính xác.

Thí dụ

Với [1, 5, 10]đầu vào:

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

Với [1, 100, 15]đầu vào là (trong các bước của 10, vì vậy 00 hiển thị 1-9, 10 hiển thị 10-19, v.v.):

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

Chấm điểm

Đây là , vì vậy mã ngắn nhất tính bằng byte thắng.


1
Tôi đoán chúng ta không được phép xuất các bảng có chiều cao lớn hơn mức cần thiết? Ví [1,5,10]dụ của bạn , chiều cao có thể được 10? Vì vậy, cột 4 sẽ trông như thế này (theo chiều dọc từ trên xuống dưới thay vì theo chiều ngang từ trái sang phải) : oooooooxxx4.
Kevin Cruijssen

6
Điều gì ngăn tôi chọn một thùng có chiều rộng b-a? Đó là một định dạng khá tiện lợi ...
Giuseppe

1
Giuseppe có nghĩa là đối với một phạm vi a...b, sơ đồ có một thùng duy nhất bao phủ toàn bộ phạm vi, dẫn đến một thanh duy nhất có chiều cao bằng với số lượng mẫu.
Stewie Griffin

1
Chúng ta có được phép vẽ biểu đồ theo chiều ngang không? Ngoài ra, các giá trị phải được chọn thống nhất trong phạm vi hay bất kỳ phân phối nào trong đó tất cả các kết quả có thể hợp lệ?

1
@Mnemonic về phân phối: Sự đồng thuận là nó không phải thống nhất trừ khi OP đã chỉ định nó.
Stewie Griffin

Câu trả lời:


3

Thạch , 13 byte

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

Sử dụng một định dạng rất thuận tiện:

  • In các giá trị trên trục trái
  • Sử dụng 0làm pixel phân phối (như xs) và 1làm pixel nền (như os)
  • Sử dụng càng nhiều khoảng cách ngang giữa "pixel" vì có các ký tự trong số độ dài tối đa trong phạm vi (ví dụ: -23 là chiều dài 3, trong khi 23 là chiều dài 2).

Hãy thử trực tuyến!

Lưu ý: Nếu đầu vào không phải là một mảng thì sẽ có 11 byte lấy hai đối số [from, to]sampleSizechỉ với r/;"xẊĠ>ʋ¥G.


Tôi nghĩ rằng điều này có thể đang sử dụng trợ cấp định dạng thuận tiện chỉ là quá xa cho 4 byte:

Ṗ;1K

Điều này đang sử dụng ý tưởng (cần được giải quyết) được đưa ra bởi Giuseppe trong các bình luận với một thùng duy nhất được xác định fromtophân tách bằng một khoảng trắng, một không gian khác đại diện cho trục và một không gian đại diện cho 1chiều cao 100%.

... Hoặc thậm chí chỉ Ṗ1với 2 byte!


10

Octave , 34 32 byte

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

Không hoạt động trên TIO, nhưng hoạt động trên Octave-online.net .

Nó tạo ra một biểu đồ (biểu đồ thanh) trông như thế này:

nhập mô tả hình ảnh ở đây

Tôi muốn nói rằng được tính là "Bất kỳ định dạng thuận tiện".

Nếu các thùng khác không phải được hiển thị, thì điều này có thể được giải quyết trong 38 byte:

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

Tôi đã yêu cầu làm rõ về các thùng có chiều cao bằng không - điều này không thể hiện chúng nếu chúng hoàn toàn nhỏ hơn hoặc nghiêm ngặt hơn tất cả các thùng khác không ( f(1,5,1)ví dụ sẽ hiển thị hành vi).
Jonathan Allan

1
Tôi cảm thấy bắt buộc phải chỉ ra rằng đó chắc chắn không phảibiểu đồ , thay vào đó là biểu đồ thanh (hoàn toàn không giống nhau).
caird coinheringaahing

2
@cairdcoinheringaahing lướt qua các trang wiki đó Tôi không thấy đây là biểu đồ gì. Quan tâm để giải thích lý do tại sao bạn nghĩ rằng đó là một biểu đồ thanh thay thế?
Imus

@Imus một biểu đồ là một loại biểu đồ thanh đặc biệt. Tôi cho rằng điểm mà caird coinheringaahing muốn đưa ra là nó chỉ đủ điều kiện là biểu đồ nếu các thùng đủ lớn để cho phép ước tính phân phối thực của biến ngẫu nhiên (trong trường hợp này thực sự hoàn toàn bằng phẳng). Đối với cỡ mẫu chỉ 10, thực sự không thể tạo ra một biểu đồ thích hợp.
đã ngừng quay ngược chiều

6

R , 36 byte

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

Hãy thử trực tuyến!

Thở dài. Một thân cây.

Sự tồn tại của sinh viên đại học năm thứ hai lấy Giới thiệu về Thống kê cho [Khu vực nghiên cứu cụ thể này] từ một giáo sư không biết họ đang nói về cái gì nhưng vẫn nghĩ rằng thân cây là một ý tưởng hay vì nó vẫn ở phiên bản thứ 14 của sách giáo khoa họ đã sử dụng kể từ phiên bản thứ 4 được xuất bản năm 1983.


5

than củi , 25 byte

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

Hãy thử trực tuyến! Giải trình:

≔…·θηθ

Tạo một phạm vi bao gồm của phân phối.

≔Eζ‽θη

Lấy mẫu phạm vi số lần mong muốn.

Eθ№ηι

Đếm và in số lượng của từng phạm vi trong mẫu.

↖←E⮌θ⮌Iι

In nhãn.



3

Java 11, 184 168 byte

(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]));}

Hãy thử trực tuyến. (LƯU Ý: String.repeat(int)được mô phỏng như repeat(String,int)cho cùng một số byte, vì Java 11 chưa có trên TIO.)

Giải trình:

(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 byte

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

Hãy thử trực tuyến!

Trả về một tabletần số với namestương đương với khoảng nửa mở bằng cách chọn cut, vì vậy (0,1], (1,2], (2,3], và vân vân. Làm cho không có nỗ lực để lựa chọn binning hợp lý hơn.


Sẽ không function(a,b,n)hist(sample(a:b,n,T))đáp ứng các yêu cầu của câu hỏi?
ngm

@ngm Tôi đoán ... Tôi muốn thực hiện một đầu ra văn bản vì thử thách dường như thân mật với điều đó, nhưng bạn được chào đón để tự mình đăng nó
Giuseppe

2

Ruby, 135 byte , 117 byte

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)}"}}

Ung dung:

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)

Hãy thử trực tuyến! - trong trường hợp bất cứ ai khác muốn kiểm tra nó như tôi đã làm!
Dom Hastings



1

JavaScript, 239

Tôi xin lỗi về điều này, nhưng các biến chỉ được đặt tên là willy-nilly. Dù sao, câu hỏi cho biết bất kỳ định dạng thuận tiện , vì vậy chức năng này trả về một biểu đồ đi ngang

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

Japt -R, 14 byte

Đưa đầu vào theo thứ tự tối đa, tối thiểu, kích thước. Xuất biểu đồ theo chiều ngang.

õV
öW
Ë+QpVè¥D

Thử nó


Giải trình

             :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

Bình thường, 19 byte

JmOK}FPQeQVK,N*/JNd

Hãy thử nó ở đây

Giải trình

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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.