Bir dağıtım diyagramı çizin!


12

Meydan okuma

Girdi olarak üç tamsayı verilir - min_value, max_value, sample_sizecevabınıza dizi veya birkaç parametre olarak iletebilirsiniz.

Görev için çıkış, herhangi bir uygun biçimde bir diyagramıdır Şekil sayıların frekansı, bu, (min_value, max_value)bir rasgele sayı olduğunda aralığı gösteren (min_value, max_value)aralık alınır sample_sizekez. Yanıtınız içinde rastgele sayı dizisi oluşturulmalıdır.

Geniş aralıklar ve örnek boyutları ile, gösterim doğru kaldığı sürece diyagramınızın kullandığı adımları değiştirmekte özgürsünüz.

Misal

İle [1, 5, 10]girdi olarak:

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

İle [1, 100, 15](00 gösterir 1-9, Şekil 10 10-19, vb böylece, 10 adımda,) olarak giriş:

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

puanlama

Bu , bayt en kısa kod kazanır.


1
Sanırım gerekenden daha büyük bir yüksekliğe sahip tablolar çıkarmamıza izin yok mu? Örneğin [1,5,10], yükseklik olabilir 10mi? Sütun 4 (dikey üst tırnağa yerine yatay olarak sola-sağa ait) şu şekilde görünecektir Yani: oooooooxxx4.
Kevin Cruijssen

6
Bir genişlik bölmesi seçmemi engelleyecek ne var b-a? Bu oldukça kullanışlı bir format ...
Giuseppe

1
Giuseppe, bir aralık için a...b, diyagramın tüm aralığı kapsayan tek bir bölmeye sahip olduğu ve örnek sayısına eşit yükseklikte tek bir çubuğa neden olduğu anlamına gelir .
Stewie Griffin

1
Histogramı yatay olarak çizmemize izin var mı? Ayrıca, değerler aralıkta düzgün bir şekilde mi seçilmelidir, yoksa tüm sonuçların mümkün olduğu herhangi bir dağılım geçerli midir?

1
@ Dağıtım hakkında anımsatıcı: Fikir birliği , OP belirtmedikçe tekdüze olması gerekmemesidir.
Stewie Griffin

Yanıtlar:


3

Jöle , 13 bayt

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

Çok uygun bir format kullanır :

  • Sol eksende değerleri yazdırır
  • Kullanımları 0(gibi dağıtım pikseller olarak xs) ve 1arka plan pikseller olarak (gibi os)
  • Aralıktaki maksimum uzunluk sayısındaki karakterler olduğu için "piksel" arasında çok fazla yatay boşluk kullanır (örn. -23 uzunluk 3, 23 uzunluk 2).

Çevrimiçi deneyin!

Not: Girdinin bir dizi olması gerekmiyorsa, iki argüman alan 11 bayt[from, to] ve sampleSizesadece r/;"xẊĠ>ʋ¥G.


Bu uygun biçimlendirme ödeneği sadece 4 bayt için biraz fazla alabilir düşünüyorum:

Ṗ;1K

Bu, Giuseppe tarafından yorumlarda ortaya konan fromve tobir boşlukla tanımlanan ve bir boşlukla ayrılmış tek bir bölme , ekseni temsil eden başka bir boşluk ve 1% 100 yüksekliğini temsil eden tek bir boşluk ile ortaya konulan fikri (ele alınmalıdır) kullanmaktır .

... hatta sadece Ṗ12 bayt için!


10

Oktav , 34 32 bayt

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

TIO üzerinde çalışmaz , ancak Octave-online.net üzerinde çalışır .

Şuna benzeyen bir histogram (çubuk grafik) oluşturur:

resim açıklamasını buraya girin

Bunun "Herhangi bir uygun biçim" olarak sayıldığını söyleyebilirim.

Sıfır olmayan kutular gösterilmesi gerekiyorsa , bu 38 baytta çözülebilir:

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

Sıfır yükseklik kutuları hakkında açıklama istedim - bu sıfır olmayan tüm kesinlikle daha az veya kesinlikle daha büyük olup olmadığını göstermek için başarısız olur ( f(1,5,1)örneğin davranışı gösterir).
Jonathan Allan

1
Bunun kesinlikle bir histogram olmadığını , bunun yerine bir çubuk grafik olduğunu (aynı şey değil, hiç) belirtmek zorundayım .
Ocak 18

2
@cairdcoinheringaahing bu wiki sayfalarında göz gezdirme Bunun bir histogram olmayacağını görmüyorum. Bunun neden bir çubuk grafik olduğunu düşündüğünüzü açıklamak ister misiniz?
Imus

@Bir histogram özel bir çubuk grafik türüdür. Caird coinheringaahing'in yapmak istediği noktayı, sadece kutular, rastgele değişkenin gerçek dağılımını tahmin etmeye yetecek kadar büyükse (bu durumda aslında tamamen düz) histogram olarak nitelendirdiğini düşünürüm. Sadece 10 kişilik bir örneklem için uygun bir histogram oluşturmak gerçekten mümkün değildir.
saat yönünün tersine çevirmeyi bıraktı

6

R , 36 bayt

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

Çevrimiçi deneyin!

İç çekmek. Bir stemplot.

Ne hakkında konuştuklarını bilmeyen, ancak yine de stemplots'un iyi bir fikir olduğunu düşünen bir profesörden [Bu Özel Çalışma Alanı] için İstatistiklere Giriş alan ikinci yıl üniversite öğrencileri için varoluş hali, hala 14. baskıda olduğu için 1983'te yayımlanan 4. baskıdan beri kullandıkları ders kitabının


5

Kömür , 25 bayt

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

Çevrimiçi deneyin! Açıklama:

≔…·θηθ

Kapsayıcı bir dağıtım aralığı oluşturun.

≔Eζ‽θη

Aralığı istediğiniz sayıda örnekleyin.

Eθ№ηι

Örnekteki aralıkların her birini sayın ve yazdırın.

↖←E⮌θ⮌Iι

Etiketleri yazdırın.


3

Python 2 , 115 bayt

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'

Çevrimiçi deneyin!


Python 2 , 164 bayt

sütun tabanlı çıktı.

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,

Çevrimiçi deneyin!


3

Java 11, 184168 bayt

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

Çevrimiçi deneyin. (NOT: Java 11 henüz TIO'da olmadığı için aynı bayt sayımı için String.repeat(int)taklit edilmiştir repeat(String,int).)

Açıklama:

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

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

Çevrimiçi deneyin!

Bir döner tableile frekansları namesseçilen yarı açık aralıklarda eşit cut, yani (0,1], (1,2], (2,3]ve benzeri. Daha makul bir binning seçmek için hiçbir çaba sarf etmez.


Olmaz function(a,b,n)hist(sample(a:b,n,T))soruya gereksinimlerini karşılamak?
ngm

@ngm Sanırım ... Meydan okuma bu kadar samimi gibi göründüğü için bir metin çıktısı yapmak istedim, ancak bunu kendiniz yayınlamaktan daha fazlasınız var
Giuseppe

2

Yakut, 135 bayt , 117 bayt

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)

Çevrimiçi deneyin! - başka birinin benim yaptığım gibi test etmek istemesi durumunda!
Dom Hastings



1

JavaScript, 239

Bunun için özür dilerim, ancak değişkenlere willy-nilly adı verildi. Her neyse, soru herhangi bir uygun formatı söyledi , bu nedenle bu fonksiyon yan bir grafik döndürüyor

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 bayt

Giriş max, min, boyutta alır. Grafiği yatay olarak verir.

õV
öW
Ë+QpVè¥D

Dene


açıklama

             :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 bayt

JmOK}FPQeQVK,N*/JNd

Burada deneyin

açıklama

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.