วาดแผนภาพการกระจาย!


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]อินพุต (ในขั้นตอน 10 ดังนั้น 00 แสดง 1-9, 10 แสดง 10-19 เป็นต้น):

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ไหร่ ที่ค่อนข้างรูปแบบที่สะดวก ...
จูเซปเป้

1
จูเซปเป้หมายความว่าในช่วงa...bไดอะแกรมมีถังขยะเดียวที่ครอบคลุมช่วงทั้งหมดทำให้แท่งเดียวมีความสูงเท่ากับจำนวนตัวอย่าง
Stewie Griffin

1
เราได้รับอนุญาตให้วาดฮิสโตแกรมในแนวนอนหรือไม่? นอกจากนี้ค่าจะต้องได้รับการเลือกอย่างสม่ำเสมอในช่วงหรือการกระจายใด ๆ ที่ผลลัพธ์ทั้งหมดเป็นไปได้ที่ถูกต้อง?

1
@ ความจำเกี่ยวกับการแจกแจง: ฉันทามติคือมันไม่จำเป็นต้องเหมือนกันเว้นแต่ OP ได้ระบุไว้
Stewie Griffin

คำตอบ:


3

เยลลี่ 13 ไบต์

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

ใช้รูปแบบที่สะดวกมาก :

  • พิมพ์ค่าบนแกนซ้าย
  • ใช้0เป็นพิกเซลการแจกจ่าย (เช่นxs) และ1เป็นพิกเซลพื้นหลัง (เช่นos)
  • ใช้ช่องว่างแนวนอนระหว่าง "พิกเซล" มากเท่าที่มีอักขระในจำนวนความยาวสูงสุดในช่วง (เช่น -23 คือความยาว 3 ในขณะที่ 23 คือความยาว 2)

ลองออนไลน์!

หมายเหตุ: ถ้าใส่ไม่ได้จะต้องมีอาร์เรย์มันจะเป็น11 ไบต์การสองมีปากเสียง[from, to]และมีเพียงsampleSizer/;"xẊĠ>ʋ¥G


ฉันคิดว่านี่อาจใช้การจัดรูปแบบที่สะดวกเพียงเล็กน้อยเกินไปสำหรับ 4 ไบต์:

Ṗ;1K

นี่คือการใช้ความคิด (ซึ่งควรได้รับการแก้ไข) หยิบยกโดยGiuseppe ในความคิดเห็นที่มี bin เดียวที่ระบุด้วยfromและtoคั่นด้วยช่องว่างช่องว่างอีกอันที่เป็นตัวแทนของแกนและอีกอันหนึ่ง1แสดงความสูง 100%

... หรือแม้กระทั่งเพียงṖ12 ไบต์!


10

คู่ , 34 32 ไบต์

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

ไม่ทำงานบน TIO แต่ทำงานบนOctave-online.net

มันสร้างฮิสโตแกรม (แผนภูมิแท่ง) ที่มีลักษณะดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันจะบอกว่านับเป็น "รูปแบบใดก็ได้ที่สะดวก"

หากต้องแสดงถังขยะที่ไม่เป็นศูนย์จะสามารถแก้ไขได้ใน 38 ไบต์:

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

ฉันขอคำชี้แจงเกี่ยวกับถังขยะความสูงเป็นศูนย์ - สิ่งนี้ไม่สามารถแสดงให้พวกเขาเห็นได้ว่าพวกเขามีน้อยกว่าหรือเคร่งครัดกว่าคนที่ไม่ได้เป็นศูนย์ทั้งหมดอย่างเคร่งครัด ( f(1,5,1)จะแสดงพฤติกรรมตัวอย่าง)
Jonathan Allan

1
ผมรู้สึกว่าหน้าที่ที่จะชี้ให้เห็นว่าเป็นที่สุดอย่างแน่นอนไม่histogramค่อนข้างจะเป็นแผนภูมิแท่ง (ซึ่งไม่ได้ในสิ่งเดียวกันเลย)
caird coinheringaahing

2
@cairdcoinheringaahing อ่านหน้าวิกิเหล่านั้นฉันไม่เห็นว่านี่จะเป็นฮิสโตแกรม สนใจอธิบายว่าทำไมคุณคิดว่าเป็นแผนภูมิแท่งแทน
Imus

@Imus histogram เป็นแผนภูมิแท่งชนิดพิเศษ ฉันคิดว่าจุดที่ caird coinheringaahing ต้องการทำคือมีคุณสมบัติเป็นฮิสโตแกรมหากถังขยะมีขนาดใหญ่พอที่จะประเมินการกระจายตัวที่แท้จริงของตัวแปรสุ่มได้ สำหรับขนาดตัวอย่างเพียง 10 ไม่สามารถสร้างฮิสโตแกรมที่เหมาะสมได้
หยุดที่จะหมุนกลับใน

6

R , 36 ไบต์

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

ลองออนไลน์!

ถอนหายใจ ลำต้น

ความหายนะของการดำรงอยู่ของนักศึกษามหาวิทยาลัยชั้นปีที่สองที่มีความรู้เบื้องต้นเกี่ยวกับสถิติสำหรับ [พื้นที่เฉพาะของการศึกษานี้]จากอาจารย์บางคนที่ไม่รู้ว่าพวกเขากำลังพูดถึงอะไร แต่ก็ยังคิดว่า Stemplots เป็นความคิดที่ดี ของหนังสือเรียนที่ใช้ตั้งแต่รุ่นที่ 4 ถูกตีพิมพ์ในปี 1983


5

ถ่าน 25 ไบต์

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

ลองออนไลน์! คำอธิบาย:

≔…·θηθ

สร้างช่วงการกระจายอย่างครอบคลุม

≔Eζ‽θη

ตัวอย่างช่วงจำนวนครั้งที่ต้องการ

Eθ№ηι

นับและพิมพ์จำนวนของแต่ละช่วงในตัวอย่าง

↖←E⮌θ⮌Iι

พิมพ์ฉลาก


3

Python 2 , 115 ไบต์

from random import*
a,b,n=input()
r=range(a,b+1)
s=sample(r*n,n)
for v in r:print'%%0%dd'%len(`b`)%v,s.count(v)*'x'

ลองออนไลน์!


Python 2 , 164 ไบต์

เอาต์พุตแบบอิงคอลัมน์

from random import*
a,b,n=input()
r=range(a,b+1)
s=sample(r*n,n)
d=len(`b`)
while n:n-=1;print' '.join(d*'ox'[s.count(v)>n]for v in r)
for v in r:print'%%0%dd'%d%v,

ลองออนไลน์!


3

Java 11, 184 168 ไบต์

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

ลองออนไลน์ (หมายเหตุ: String.repeat(int)ถูกจำลองrepeat(String,int)สำหรับไบต์เดียวกันเนื่องจาก Java 11 ยังไม่ได้อยู่ใน TIO)

คำอธิบาย:

(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]และอื่น ๆ ไม่ต้องพยายามเลือกการ binning ที่สมเหตุสมผลมากขึ้น


จะไม่function(a,b,n)hist(sample(a:b,n,T))ตอบสนองความต้องการของคำถามหรือไม่
ngm

@ngm ฉันเดาว่า ... ฉันต้องการที่จะส่งออกข้อความเนื่องจากความท้าทายดูเหมือนจะสนิทสนมกัน แต่คุณยินดีที่จะโพสต์ด้วยตัวคุณเอง
Giuseppe

2

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

Ungolfed:

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

JavaScript, 239

ฉันขอโทษเกี่ยวกับเรื่องนี้ แต่ตัวแปรที่เพิ่งตั้งชื่อวิลลี่ -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

Japt -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.