Rosetta Stone Challenge: Намалюйте графік


10

Мета Challenge Rosetta Stone - написати рішення на якомога більшій кількості мов. Покажіть багатомовність програмування!

Змагання

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

Що таке "сюжетна скринька"?

Коробка ділянку є спосіб побудови графіків даних. Сюжет коробки має кілька істотних особливостей. Перша особливість - це вікно, обидві сторони якого розташовані на першому та третьому кварталах даних. Внизу по центру віконної лінії є лінія, яка дає медіану. На будь-якому кінці ділянки коробки є "вуса", які допомагають показати різницю даних. Вуса поширюються від поля до найменших і найбільших точок у наборі даних, виключаючи випадаючі. Атрибути зображуються як окремі очки.

Спочатку візьміть медіану даних. Потім візьміть усі точки даних, які суворо менші за медіану, і обчисліть медіану цього набору, щоб вона стала першою чвертію (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

Об'єктивний критерій виграшу

Що стосується об'єктивного критерію виграшу, то ось він: Кожна мова - це окремий конкурс щодо того, хто може написати найкоротший запис, але загальним переможцем буде та людина, яка виграє більшість із цих підконкурсів. Це означає, що людина, яка відповідає на багатьох незвичайних мовах, може отримати перевагу. Код-гольф - це здебільшого краватка, коли в мові існує більше одного рішення: особа, яка має найкоротшу програму, отримує заслуги за цю мову.

Правила, обмеження та примітки

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


Поточна таблиця лідерів

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

  • Юлія (604 р.) - планувальник
  • Математика (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.