Rosetta Stone Challenge: Нарисуйте участок коробки


10

Целью Rosetta Stone Challenge является написание решений на максимально возможном количестве языков. Покажите свое программирование многоязычия!

Соревнование

Ваша задача состоит в том, чтобы реализовать программу, которая будет вводить список чисел и выводить коробочный график данных на максимально возможном количестве языков программирования . Квадратный график будет отображать квартили и выбросы в данных, и он даже будет иметь масштаб. Вам разрешается использовать любую стандартную библиотечную функцию, имеющуюся в вашем языке, поскольку это в основном демонстрация языка.

Что такое «коробочный сюжет»?

Коробка участок представляет собой способ построения графиков данных. Коробочный сюжет имеет несколько существенных особенностей. Первая особенность представляет собой прямоугольник, каждая сторона которого расположена в первом и третьем квартилях данных. Внизу по центру окна есть линия, которая дает медиану. На обоих концах прямоугольника есть «усы», которые помогают показать дисперсию данных. Усик простирается от прямоугольника до наименьших и наибольших точек в наборе данных, исключая выбросы. Выбросы наносятся на отдельные точки.

Сначала возьмите медиану данных. Затем возьмите все точки данных, которые строго меньше медианы, и вычислите медиану этого набора, чтобы стать первым квартилем (Q1). Возьмите все точки данных, которые строго больше медианы, и вычислите медиану этого набора, чтобы стать третьим квартилем (Q3). Найдите значение R = 1.5*(Q3 - Q1). Любые числа меньше, Q1 - Rэто выбросы. Любые числа больше, чем Q3 + Rвыбросы. Возьмите набор всех точек данных, которые не являются выбросами, и минимум и максимум этого набора определяют концы двух усов.

вход

Ввод начнется с n=последующего числа. Затем будут nцифры, по одному на строку. Все числа будут целыми числами от 0 до 63 включительно.

n=8
29
1
22
18
12
16
16
22

Вывод

На выходе будет представлена ​​коробка сюжета. Один из возможных способов нарисовать график - сделать его в ASCII. Вы можете визуализировать рамочный график многими другими способами, кроме ASCII, но главное требование - рисовать достаточно большой, чтобы можно было точно определить местоположение важных объектов. Квадратный график должен иметь шкалу, состоящую из примерно 5-10 чисел, равномерно распределенных. Вот один пример графика вышеуказанных данных:

              +--+----+        
              |  |    |        
 X          +-+  |    +------+ 
              |  |    |        
              +--+----+        

0    0    1    1    2    2    3
0    5    0    5    0    5    0

Объективный критерий победы

Что касается объективного критерия выигрыша, то здесь: каждый язык - это отдельное соревнование в отношении того, кто может написать самую короткую запись, но общим победителем будет тот, кто выиграет большинство из этих подконкурсов. Это означает, что человек, который отвечает на многих необычных языках, может получить преимущество. Code-golf - это, в основном, тай-брейк, когда на языке существует более одного решения: человек с самой короткой программой получает кредит на этот язык.

Правила, ограничения и примечания

Ваша программа может быть написана на любом языке, существовавшем до 11 апреля 2013 года. Мне также придется полагаться на сообщество для проверки некоторых ответов, написанных на некоторых из более необычных / эзотерических языков, поскольку я вряд ли смогу протестировать их.


Текущий список лидеров

Этот раздел будет периодически обновляться, чтобы показать количество языков и лидирующих в каждом.

  • Юлия (604) - планнапус
  • Mathematica (71) - чианог
  • Python2.X (85) - Абхиджит
  • R (34) - планапус

Рейтинг текущих пользователей

  1. планнапус - 2
  2. Абхиджит - 1
  3. Чианог - 1

2
Я люблю это! Очень хорошая конфигурация правил. Теперь, чтобы выучить некоторые языки ...
luser droog

Ответы:


6

R: 34 символа

Конечно, R является языком, используемым для статистики, он поставляется с функцией, boxplotкоторая делает это (которая нуждается в обертке для соответствия стилю ввода):

f=function(x)boxplot(scan(x,sk=1))

Использование: Учитывая файл, input1.txtсодержащий следующее:

n=10
29
1
22
19
9
13
15
22
63
2

Затем f("input1.txt")производит:

введите описание изображения здесь

Юлия: 604 персонажа

Это моя первая функция в Юлии, поэтому я приношу свои извинения поклонникам Юлии, если это плохо написано.

function g(f)
a=int(split(readall(open(f)),'\n')[2:])
b,c,d=int(quantile(a,[.25,.5,.75]))
w=1.5*(d-b)
o=a[a.<b-w]
O=a[a.>d+w]
t=int(b-w>0?b-w:0)
u=int(d+w<63?d+w:63)
S=s=""
if !isempty(o)
for i in 1:length(o)
s=s*lpad('x',[0,o][i+1]-[0,o][i]-1,' ')
end
end
if !isempty(O)
for i in 1:length(O)
S=S*lpad('x',[0,O][i+1]-[0,O][i]-u-1,' ')
end
end
x="0"
for i in 9:9:63
x=x*lpad(string(i),i-(i-9)," ")
end
v=isempty(o)?b-1:b-o[length(o)]-1
print(x*"\n"*lpad('+'*'-'^(d-b-1)*'+',d,' ')*'\n'*s*lpad('-'^(b-t-1),v,' ')*'|'*lpad('|',c-b,' ')*' '^(d-c-1)*'|'*'-'^(u-d)*S*'\n'*lpad('+'*'-'^(d-b-1)*'+',d,' '))
end

Применение:

g("input1.txt")
0        9       18       27       36       45       54       63
         +-----------+
---------|      |    |------------------                     x
         +-----------+

2

Python2.X 85 символов, используя matplotlib

import matplotlib.pylab as p
p.boxplot(map(input,['']*int(raw_input()[2:])))
p.show()

введите описание изображения здесь


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.