Нарисуйте схему распределения!


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
@ Мнемоника о распределении: консенсус заключается в том, что он не должен быть равномерным, если 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 Coneheringaahing

2
@cairdcoinheringaahing просматривая эти вики-страницы, я не вижу, что это не будет гистограмма. Не могли бы вы объяснить, почему вы думаете, что это гистограмма?
Imus

@Imus гистограмма - это особый вид гистограммы. Я считаю, что идея caird coinheringaahing состоит в том, что она квалифицируется как гистограмма только в том случае, если ячейки достаточно велики, чтобы можно было оценить фактическое распределение случайной величины (которая в этом случае фактически является абсолютно плоской). Для выборки размером всего 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 Я думаю ... Я хотел сделать текстовый вывод, так как задача, казалось, давала понять, но вы можете опубликовать это сами
Джузеппе

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

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)

Попробуйте онлайн! - на случай, если кто-то еще захочет проверить это, как я!
Дом Гастингс



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 байт

Принимает ввод в порядке max, min, size. Выводит диаграмму по горизонтали.

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