Thử thách Rosetta Stone: Vẽ một ô đồ họa


10

Mục tiêu của Thử thách Rosetta Stone là viết các giải pháp bằng càng nhiều ngôn ngữ càng tốt. Thể hiện đa ngôn ngữ lập trình của bạn!

Các thách thức

Thách thức của bạn là triển khai một chương trình sẽ nhập danh sách các số và xuất ra một ô dữ liệu, bằng càng nhiều ngôn ngữ lập trình càng tốt . Biểu đồ hộp sẽ hiển thị các phần tư và ngoại lệ trong dữ liệu và thậm chí nó sẽ có tỷ lệ. Bạn được phép sử dụng bất kỳ loại chức năng thư viện tiêu chuẩn nào mà ngôn ngữ của bạn có, vì đây chủ yếu là một ngôn ngữ giới thiệu.

Một "hộp âm mưu là gì?"

Một âm mưu hộp là một cách để vẽ đồ thị dữ liệu. Một âm mưu hộp có một vài tính năng cần thiết. Tính năng đầu tiên là một hộp, với một trong hai bên được đặt ở phần tư thứ nhất và thứ ba của dữ liệu. Có một dòng xuống trung tâm của ô hộp cung cấp cho trung vị. Ở hai đầu của ô hộp, có "râu" giúp hiển thị phương sai của dữ liệu. Râu kéo dài từ hộp đến các điểm nhỏ nhất và lớn nhất trong tập dữ liệu, ngoại trừ các ngoại lệ. Các ngoại lệ được vẽ như các điểm riêng lẻ.

Đầu tiên, lấy trung bình của dữ liệu. Sau đó, lấy tất cả các điểm dữ liệu nhỏ hơn trung bình và tính toán trung vị của tập hợp này để trở thành phần tư đầu tiên (Q1). Lấy tất cả các điểm dữ liệu lớn hơn trung bình và tính toán trung vị của tập hợp này để trở thành phần tư thứ ba (Q3). Tìm giá trị của R = 1.5*(Q3 - Q1). Bất kỳ số nào ít hơn Q1 - Rđây là ngoại lệ. Bất kỳ số nào lớn hơn Q3 + Rlà ngoại lệ. Lấy tập hợp tất cả các điểm dữ liệu không phải là ngoại lệ và mức tối thiểu và tối đa của tập hợp này xác định các đầu của hai râu.

Đầu vào

Đầu vào sẽ bắt đầu n=bằng một số. Sau đó sẽ có nsố, một trên mỗi dòng. Tất cả các số sẽ là số nguyên từ 0 đến 63, bao gồm.

n=8
29
1
22
18
12
16
16
22

Đầu ra

Đầu ra sẽ là một biểu hiện của âm mưu hộp. Một cách có thể để vẽ cốt truyện là bằng cách hiển thị nó trong ASCII. Bạn có thể kết xuất biểu đồ hộp theo nhiều cách khác với ASCII, nhưng yêu cầu chính là vẽ đủ lớn để có thể cho biết vị trí chính xác của các tính năng quan trọng. Biểu đồ hình hộp phải có tỷ lệ, bao gồm khoảng 5-10 số cách đều nhau. Dưới đây là một ví dụ về dữ liệu trên:

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

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

Tiêu chí chiến thắng khách quan

Đối với một tiêu chí chiến thắng khách quan, đây là: Mỗi ngôn ngữ là một cuộc thi riêng biệt để ai có thể viết bài dự thi ngắn nhất, nhưng người chiến thắng chung cuộc sẽ là người chiến thắng hầu hết các cuộc thi phụ này. Điều này có nghĩa là một người trả lời bằng nhiều ngôn ngữ không phổ biến có thể đạt được lợi thế. Code-golf chủ yếu là một công cụ hòa nhập khi có nhiều hơn một giải pháp trong một ngôn ngữ: người có chương trình ngắn nhất được tín dụng cho ngôn ngữ đó.

Quy tắc, hạn chế và ghi chú

Chương trình của bạn có thể được viết bằng bất kỳ ngôn ngữ nào tồn tại trước ngày 11 tháng 4 năm 2013. Tôi cũng sẽ phải dựa vào cộng đồng để xác thực một số câu trả lời được viết bằng một số ngôn ngữ không phổ biến / bí truyền hơn, vì tôi không thể kiểm tra họ


Bảng xếp hạng hiện tại

Phần này sẽ được cập nhật định kỳ để hiển thị số lượng ngôn ngữ và những người đang dẫn đầu trong mỗi ngôn ngữ.

  • Julia (604) - plannapus
  • Toán học (71) - chyanog
  • Python2.X (85) - Abhijit
  • R (34) - plannapus

Xếp hạng người dùng hiện tại

  1. plannapus - 2
  2. Abhijit - 1
  3. chyanog - 1

2
Tôi thích nó! Một cấu hình rất đẹp của các quy tắc. Bây giờ để học một số ngôn ngữ ...
luser droog

Câu trả lời:


6

R: 34 ký tự

Tất nhiên, R là một ngôn ngữ được sử dụng để thống kê, nó đi kèm với một chức năng boxplotđể làm điều này (cần một trình bao bọc ở đây để chứa các kiểu đầu vào):

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

Cách sử dụng: Cho một tệp input1.txtchứa các mục sau:

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

Sau đó f("input1.txt")sản xuất:

nhập mô tả hình ảnh ở đây

Julia: 604 ký tự

Đây là chức năng đầu tiên của tôi ở Julia, vì vậy tôi xin lỗi người hâm mộ của Julia nếu điều này được viết xấu.

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

Sử dụng:

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

2

Python2.X 85 Ký tự, sử dụng matplotlib

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

nhập mô tả hình ảnh ở đây


1

Toán học 71

BoxWhiskerChart[Input/@x~Array~FromDigits@StringTake[InputString[],-1]]

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.