Намалюйте схему розподілу!


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.
Кевін Круїйсен

6
Що заважає мені вибирати відро з шириною b-a? Це досить зручний формат ...
Джузеппе

1
Джузеппе означає, що для діапазону a...bдіаграма має єдиний бункер, який охоплює весь діапазон, в результаті чого утворюється одна смуга висотою, що дорівнює кількості зразків.
Стюі Гріффін

1
Чи дозволяється нам малювати гістограму горизонтально? Також, чи варто вибирати значення рівномірно в діапазоні, чи чи є розподіл, де всі результати можливі?

1
@Mnemonic щодо розподілу: єдиний висновок полягає в тому, що він не повинен бути рівномірним, якщо OP не вказав його.
Стюі Гріффін

Відповіді:


3

Желе , 13 байт

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

Використовується дуже зручний формат:

  • Друкує значення на лівій осі
  • Використовується 0як пікселі розподілу (як і xs) і 1як фонові пікселі (як і os)
  • Використовується стільки горизонтальних пробілів між "пікселями", скільки символів має максимальну кількість довжини в діапазоні (наприклад, -23 - довжина 3, а 23 - довжина 2).

Спробуйте в Інтернеті!

Примітка: Якщо вхід не повинен був бути масивом, це було б 11 байтів з двома аргументами [from, to]і sampleSizeз справедливим r/;"xẊĠ>ʋ¥G.


Я думаю, що це може призвести до зручності форматування надто далеко за 4 байти:

Ṗ;1K

Для цього використовується ідея (яку слід вирішити), висунута Джузеппе в коментарях, з однією бункером, ідентифікованим fromі toрозділеним пробілом, іншим простором, що представляє вісь і одинарним, що 1представляє висоту 100%.

... або навіть просто Ṗ1на 2 байти!


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
Я відчуваю , зобов'язаний вказати на те , що це, безумовно , НЕ гістограма , а це гістограма (що не одне і те ж, у всіх).
caird coinheringaahing

2
@cairdcoinheringaahing проглядається через ці вікі-сторінки, я не бачу, що це не буде гістограмою. Хочете пояснити, чому ви вважаєте, що це замість цього діаграма?
Імус

@Imus гістограма - це особливий вид гістограми. Я вважаю, що бажає зробити спільний коінхерінгах, що він кваліфікується як гістограма лише у тому випадку, коли бункери є досить великими, щоб можна було оцінити фактичний розподіл випадкової величини (що в цьому випадку насправді є абсолютно рівним). Для розміру вибірки всього 10 неможливо створити правильну гістограму.
перестали повертати проти годинника,

6

R , 36 байт

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

Спробуйте в Інтернеті!

Зітхнути. Стебло.

Швидкість існування для студентів другого курсу, які беруть вступ до статистики [цього конкретного напряму навчання] від професора, який не знає, про що вони говорять, але все ще вважають, що стовбури є гарною ідеєю, оскільки це все ще в 14-му випуску підручника, яким вони користуються з 4-го видання, вийшло друком у 1983 році.


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

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

Безголівки:

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

Пробачте про це, але змінні були названі просто вольово-невільними. У будь-якому разі, питання задає будь-який зручний формат , тому ця функція повертає бічний графік

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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.