分布図を描く!


12

チャレンジ

入力として3つの整数が与えられます- 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
ケビンクルーッセン

6
幅のビンを選択しないようにするにはどうすればよいb-aですか?それは非常に便利な形式です
ジュゼッペ

1
ジュゼッペは、範囲のa...b場合、ダイアグラムには範囲全体をカバーする単一のビンがあり、その結果、高さがサンプルの数に等しい単一のバーが得られることを意味します。
スティーヴィーグリフィン

1
ヒストグラムを水平に描画できますか?また、値は範囲内で均一に選択する必要がありますか、またはすべての結果が可能な分布は有効ですか?

1
分布に関する@ニーモニック:コンセンサスは、OPが指定しない限り、均一である必要はないということです。
スチューイーグリフィン

回答:


3

ゼリー、13 バイト

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

非常に便利な形式を使用します。

  • 左軸に値を印刷します
  • 用途0(等分布画素としてxS)と1のような背景ピクセルとして(o S)
  • 範囲内の最大長の文字数と同じ数の「ピクセル」間の水平スペースを使用します(たとえば、-23は長さ3、23は長さ2)。

オンラインでお試しください!

注:入力が配列である必要はありませんでした場合、それは次のようになり11バイト、二つの引数を取る[from, to]sampleSizeちょうどでr/;"xẊĠ>ʋ¥G


これは、4バイトの場合、便利なフォーマットの余裕を少し取っている可能性があると思います。

Ṗ;1K

これは、(アドレス指定されるべきである)アイデアを使用していることにより、前方に置くコメントではGiuseppeで識別される単一のビンと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)たとえば、動作が表示されます)。
ジョナサンアラン

1
私はそれが最も確かであることを指摘する義務を感じていないヒストグラム、むしろそれは、棒グラフ(すべてでは、同じものではありませんています)。
コイナーリンガーアーイング

2
@cairdcoinheringaahingがこれらのwikiページをざっと読んでいると、これがヒストグラムにならないことがわかりません。代わりに棒グラフだと思う理由を説明してください。
Imus

@Imus a histogramは特別な種類の棒グラフです。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、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]、など。より合理的なビニングを選択する努力をしません。


function(a,b,n)hist(sample(a:b,n,T))質問の要件を満たさないでしょうか?
ngm

@ngm私は推測します...チャレンジはそれを親密に思えたので、テキスト出力をしたかったのですが、自分でそれを投稿することは大歓迎です
ジュゼッペ

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)

オンラインでお試しください!-他の誰かが私と同じようにテストしたい場合に備えて!
ドムヘイスティングス



1

JavaScript、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

ジャプト -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.